在 redux saga 中,如果我们想处理多个 Promise,我们可以使用all
(这相当于Promise.all
):
yield all(
users.map((user) => call(signUser, user)),
);
function* signUser() {
yield call(someApi);
yield put(someSuccessAction);
}
问题是,即使其中一个承诺(调用)失败,整个任务也会被取消。
我的目标是保住任务alive,即使其中一项承诺未能实现。
在纯 JS 中我可以处理它Promise.allSettled
,但是在 redux saga 中执行此操作的正确方法是什么?
Edit:仍然没有找到任何合适的解决方案,即使我包装了yield all
in try... catch
块,即使其中一个调用失败,整个任务也会被取消。
实际上,你应该将 Promise 数组更改为all
Redux-Saga 的方法,你应该像下面这样写:
yield all(
users.map((item) =>
(function* () {
try {
return yield call(signUser, item);
} catch (e) {
return e; // **
}
})()
)
);
您传递一个自调用生成器函数来处理错误,而不是throw
use return
。因此,该行有两颗星(**)。
通过使用这种方式,所有异步操作都会返回为已解决,并且all
方法从未见过拒绝。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)