gpt4 book ai didi

javascript - 即使其中一个 promise 被拒绝,也不要让整个任务失败

转载 作者:行者123 更新时间:2023-12-01 15:15:55 25 4
gpt4 key购买 nike

在 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/

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