在 redux saga 中,如果我们想处理多个 Promise,我们可以使用 all
(相当于 Promise.all
):
yield all(
users.map((user) => call(signUser, user)),
);
function* signUser() {
yield call(someApi);
yield put(someSuccessAction);
}
问题是 ,即使其中一个 promise (调用)失败,整个任务也会被取消。我的目标是保住任务活着 ,即使其中一个 promise 失败了。
在纯 JS 中,我可以用
Promise.allSettled
处理它,但是在 redux saga 中做这件事的正确方法是什么?编辑 : 即使我把
yield all
包装起来,仍然没有找到任何合适的解决方案在 try... catch
block ,即使其中一个调用失败,整个任务也会被取消。
最佳答案
实际上,您应该将 Promises 数组更改为 all
Redux-Saga 的方法,你应该像下面这样写:
yield all(
users.map((item) =>
(function* () {
try {
return yield call(signUser, item);
} catch (e) {
return e; // **
}
})()
)
);
您传递一个自调用生成器函数来处理错误,而不是 throw
使用 return
.因此,有两颗星(**)的线。通过使用这种方式,您的所有异步操作都将返回为已解决,
all
方法没见过拒绝。
关于javascript - 即使其中一个 promise 被拒绝,也不要让整个任务失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63619471/