use*_*203 1 javascript generator helper redux-saga
我在这里面临一个复杂的问题,非常感谢您的帮助。当我导航到应用程序的不同页面时,某些服务响应错误,并且我在不同页面中看到该错误。例如,假设我想买东西,为此我调用一个处理此任务的传奇。然后我立即注销,并在登录中看到错误。当我更改屏幕时,我想取消当前页面中运行的所有传奇故事。为了解决这个问题,我做了一个动作,当用户从一个屏幕切换到另一个屏幕时调度该动作。此操作正在调用生成器函数:
function* taskCancelHelper(actions, sagas) {
.....
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是如何“采取”当前屏幕中调度的所有预期操作并调用适当的传奇。我用了:
const action = take(action => [..actions in the current screen].indexOf(action.type) < 0); but it does not seem to work.
Run Code Online (Sandbox Code Playgroud)
然后我想将调度此操作时调用的所有传奇故事传递到数组中[上述操作的传奇故事]。我的想法是在我的 taskCancelHelper* 生成器函数中传递这两个数组,并使用 for 循环来取消每个任务:
For (i=0; i < actions.length; i++) {
yield cancel(sagas[i])
}
Run Code Online (Sandbox Code Playgroud)
您知道如何执行当前屏幕上调用传奇的所有操作吗?
要取消 sagas,LOCATION_CHANGE您可以执行以下操作:
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2688 次 |
| 最近记录: |