【发布时间】:2020-09-04 23:15:33
【问题描述】:
查看以前的答案,在 Promise.all 中处理错误的适当方法是使用以下内容:
Promise.all(
promises.map(p => p.catch(error => null))
)
在我的代码中,我想在 Promise 的映射中传递一个异步函数,并且能够在该 Promise 失败时运行 catch,而不会杀死整个链。
我的代码:
const handler = async (item) => {
const result = await Promise()
return result
}
const items = [1,2,3]
const results = await Promise.all(items.map(handler))
如何在 Promise.all 中运行处理程序 func 的同时仍能捕获错误并保持链处于活动状态?
【问题讨论】:
-
等等,我是在绊倒,还是你在尝试处理对
Promise.all()内的任何 Promise 的拒绝?因为一旦任何 Promise 失败,Promise.all()就会完全拒绝。 -
如果我弄错了,@RoboRobok 纠正我,但我相信已经进行了一些增强以支持 Promise.all 中的错误捕获以保留活动链。 stackoverflow.com/questions/43503872/…
-
Promise.allSettled()的形式有所改进。旧的Promise.all()会拒绝它内部的任何东西,甚至不关心未完成的承诺。 -
它可以工作,因为这些 Promise 里面永远不会拒绝。 then() 将拒绝静音。这是在这些 Promise 进入 Promise.all() 之前完成的。
-
我的意思是你的 catch(),它是 then(undefined, calback) 的别名。 Promise 从不具有同步性质。当你把一个带有多个 then() 和 catch() 的 Promise 放到 Promise.all() 中时,每条链的末端就是最终的 Promise。但它们仍然异步工作。 Promise.all() 唯一的事情是它知道它们何时全部解决或其中任何一个被拒绝(即不捕获)。
标签: javascript node.js