使用redux-saga中的take来拉动将来的操作不会进行API调用

时间:2017-06-08 11:46:11

标签: redux-saga

我有一种情况,我从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的方式有什么问题吗?任何线索都会有所帮助

0 个答案:

没有答案