Redux-saga:取消位置更改后的观察者请求被取消

时间:2018-07-10 06:49:49

标签: react-redux redux-saga

在我的应用中,我正在制作api call for downloading a report。我已将下载报告查看器放在我的报告页面sagas中。

function* watchUploadTemplate() {
  const watcher = yield takeLatest(types.DOWNLOAD_REPORT_REQUEST, 
                 downloadReport);
  yield take(LOCATION_CHANGE);
  yield cancel(watcher);
}

但是,当我更改位置时,下载报告api调用将被取消。 如果我使用代码:

function* watchUploadTemplate() {
 const watcher = yield takeLatest(types.DOWNLOAD_REPORT_REQUEST,downloadReport);
}

然后,如果我在转到另一页面后再次单击下载报告,则会出现问题:Double call when LOCATION_CHANGE

我的问题是,我不想在更改位置时取消下载报告api调用,也不想在更改位置时进行两次api调用。

注意:我正在为报告异步注入sagas。像这样:

path: '/hotel/:hotelId',
      name: 'hotel',
      getComponent(nextState, cb) {
        const importModules = Promise.all([
          System.import('containers/Hotel/reducer'),
          System.import('containers/Hotel/sagas'),
          System.import('containers/Hotel'),
        ]);

        const renderRoute = loadModule(cb);

        importModules.then(([reducer, sagas, component]) => {
          injectReducer('hotel', reducer.default);
          injectSagas(sagas.default);
          renderRoute(component);
        });

        importModules.catch(errorLoading);
      },

0 个答案:

没有答案