Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 导航时取消一些重演传奇_Javascript_Generator_Helper_Redux Saga - Fatal编程技术网

Javascript 导航时取消一些重演传奇

Javascript 导航时取消一些重演传奇,javascript,generator,helper,redux-saga,Javascript,Generator,Helper,Redux Saga,我在这里面临一个复杂的问题,非常感谢你的帮助。当我导航到应用程序的不同页面时,一些服务响应出现错误,我在不同页面中看到错误。 例如,假设我想买一些东西,为此我称之为处理这项任务的传奇故事。然后我立即注销,我在登录中看到一个错误。当我改变屏幕时,我想取消当前页面中运行的所有传奇。 为了解决这个问题,我做了一个动作,当用户从一个屏幕切换到另一个屏幕时,该动作被调度。此操作正在调用生成器函数: function* taskCancelHelper(actions, sagas) { ..... }

我在这里面临一个复杂的问题,非常感谢你的帮助。当我导航到应用程序的不同页面时,一些服务响应出现错误,我在不同页面中看到错误。 例如,假设我想买一些东西,为此我称之为处理这项任务的传奇故事。然后我立即注销,我在登录中看到一个错误。当我改变屏幕时,我想取消当前页面中运行的所有传奇。 为了解决这个问题,我做了一个动作,当用户从一个屏幕切换到另一个屏幕时,该动作被调度。此操作正在调用生成器函数:

function* taskCancelHelper(actions, sagas) {
.....
}
我的第一个问题是如何“采取”除当前屏幕中发送的操作之外的所有操作,并调用适当的sagas。我用过:

const action = take(action => [..actions in the current screen].indexOf(action.type) < 0); but it does not seem to work.
const action=take(action=>[…当前屏幕中的操作].indexOf(action.type)<0);但它似乎不起作用。
然后,我想将执行此操作时调用的所有sagas(上述操作的sagas)传递到一个数组中。我的想法是在taskCancelHelper*生成器函数中传递这两个数组,并使用for循环取消每个任务:

For (i=0; i < actions.length; i++) {
   yield cancel(sagas[i])
}
For(i=0;i

您知道如何执行当前屏幕上调用sagas的所有操作吗?

要取消位置更改上的sagas,您可以执行以下操作:

 import { LOCATION_CHANGE } from 'react-router-redux';
 import { takeLatest, put, fork, take, cancel } from 'redux-saga/effects';
 import { FETCH_DATA } from './constants';

 export function* dataFetch(action) {
   try {
     // make an api call
   } catch(error) {
     console.log(error);
   }
 }

 export function* defaultSaga() {
   const loadDataWatcher = yield fork(takeLatest, FETCH_DATA, dataFetch);

   yield take(LOCATION_CHANGE);
   yield cancel(loadDataWatcher); // Will cancel your saga
 }

 export default defaultSaga;

非常感谢你的回答!你知道我如何在一个屏幕上执行所有的动作吗?你能更具体一点吗?