以下是我发布问题之前的代码简介:
我有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通话。我缺少的配置是否有任何变化?