我有一种情况,我从API获取报告,然后为报告中的每个图表提供数据。如果我实现这样的观察者:
function* watchGetChartDataInReport() {
yield takeEvery(types.CHART_DATA_FOR_REPORT_REQUEST, fetchChartData);
}
我的fetchChartData如下所示:
export function* fetchChartData(params) {
try {
console.log(params);
const result = yield call(Api.getChartDataForReport, params.params.chartid, params.params.date, params.params.dimensionFilters, params.params.compare);
console.log(result);
yield [
put({ type: types.CHART_DATA_FOR_REPORT_SUCCESS, data: result.response.data, chartId: result.response.cid }),
];
} catch (error) {
yield put({ type: types.CHART_DATA_FOR_REPORT_FAILURE, error });
}
}
它工作正常。但我想要更多的控制权,以便我可以取消此任务,如果用户在获取所有图表的数据之前切换到另一个报告。此外,如果过滤器等应用于报告,我想取消获取数据的任务。所以我正在尝试另一种方法,我可以更好地控制执行。我的新观察者看起来像这样:
function* watchGetChartDataInReport() {
while (true) {
const action = yield take(types.CHART_DATA_FOR_REPORT_REQUEST);
yield fork(fetchChartData, action.params);
}
}
我希望在这个阶段,两者都应该一样。除了在第二种情况下,它正在调用fetchChartData
,但是没有发生对API的调用。它记录发送给函数的params,就是这样。在我的情况下,我做了两个图表的示例调用,两次我将params记录到控制台。
我自己实施这个takeEvery的方式有什么问题吗?任何线索都会有所帮助