takeLatestHelper在redux-saga-effects中被取消

时间:2017-03-21 11:46:34

标签: redux-saga

以下是我发布问题之前的代码简介:

我有index.js,我把所有观察者都放在我的传奇中。这个文件是从不同的文件导入传奇。它看起来像这样:

import {fork, call, put, takeLatest, takeEvery} from 'redux-saga/effects';
import * as types from '../constants/actionTypes';
import { getKpiListSaga, getDimensionsListSaga } from './chartSaga';

function* watchGetKpiList() {
  yield takeLatest(types.GET_KPI_LIST_REQUEST, getKpiListSaga);
}

function* watchGetDimensionStructure() {
  yield takeLatest(types.GET_DIMENSION_LIST_REQUEST, getDimensionsListSaga);
}

export default function* root() {
  yield [
    fork(watchGetKpiList),
    fork(watchGetDimensionStructure),
 ];
}

在我的chartSaga.js中,我正在进行相应的api调用:

import {put, call} from 'redux-saga/effects';
import { getKpiList,  getDimensionsStructureForFacts} from '../services/api';
import * as types from '../constants/actionTypes';
import _ from 'lodash';

export function* getKpiListSaga() {
  try {
    const kpis = yield call(getKpiList);
    yield [
      put({type: types.GET_KPI_LIST_SUCCESS, kpis}),
    ];
  } catch (error) {
    yield put({type: types.GET_KPI_LIST_FAILURE, error});
  }
}

所以基本的想法是,当我的页面加载时,我调用了一个动作来发出GET_KPI_LIST_REQUEST类型的请求,它曾经在Saga中结束,我在减速器中将结果返回到成功或者失败。然后在选择KPI时,我可以调用与该KPI相关的维度。

当我执行import {takeLatest, takeEvery} from 'redux-saga';并使用yield而不是yield*时,这一切都正常。它显示了弃用消息,因此我将导入更改为效果,并且根据示例,yield应该可以解决问题。

但我第一次在页面加载时获取KPI的调用工作正常。当我触发动作来获取尺寸时,我会在这样的控制台中获取日志(对于所有观察者来说,它都会继续,我只是在下面包含一个片段):

takeLatestHelper has been cancelled    utils.js?1f12:206 
watchGetKpiList has been cancelled     utils.js?1f12:206 
takeLatestHelper has been cancelled    utils.js?1f12:206 
watchAuth has been cancelled              utils.js?1f12:206 

在此之后,由于所有观察者都被取消,因此没有进行api通话。我缺少的配置是否有任何变化?

0 个答案:

没有答案