gpt4 book ai didi

javascript - 导航时取消一些 redux sagas

转载 作者:行者123 更新时间:2023-11-30 11:25:02 27 4
gpt4 key购买 nike

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

function* taskCancelHelper(actions, sagas) {
.....
}

我的第一个问题是如何“采取”所有期望从当前屏幕中调度的 Action 并调用适当的 sagas。我用过:

const action = take(action => [..actions in the current screen].indexOf(action.type) < 0); but it does not seem to work.

然后我想将在调度此操作时调用的所有 sagas [上述操作的 sagas] 传递到一个数组中。我的想法是将这两个数组传递到我的 taskCancelHelper* 生成器函数中,并使用 for 循环来取消每个任务:

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

您知道如何执行调用 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;

关于javascript - 导航时取消一些 redux sagas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48344003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com