Pat*_*kkx 7 javascript promise reactjs redux-saga react-redux
在 redux saga 中,如果我们想处理多个 promise,我们可以使用all(相当于Promise.all):
yield all(
users.map((user) => call(signUser, user)),
);
function* signUser() {
yield call(someApi);
yield put(someSuccessAction);
}
Run Code Online (Sandbox Code Playgroud)
问题是,即使其中一个承诺(调用)失败,整个任务也会被取消。
我的目标是保持任务活着,即使其中一项承诺失败。
在纯 JS 中我可以用 来处理它Promise.allSettled,但是在 redux saga 中正确的方法是什么?
编辑:仍然没有找到任何合适的解决方案,即使我包装了yield allintry... catch块,即使其中一个调用失败,整个任务也会被取消。
实际上,你应该将 Promises 数组更改为allRedux-Saga 的方法,你应该像下面这样编写:
yield all(
users.map((item) =>
(function* () {
try {
return yield call(signUser, item);
} catch (e) {
return e; // **
}
})()
)
);
Run Code Online (Sandbox Code Playgroud)
您传递一个自调用生成器函数来处理错误,而不是throw使用return。因此,该行有两颗星(**)。
通过使用这种方式,所有异步操作都会返回已解决的状态,并且该all方法从未出现过拒绝。
| 归档时间: |
|
| 查看次数: |
683 次 |
| 最近记录: |