我正在尝试运行一个for循环,它将一堆异步请求排队。一旦所有请求都完成,不管它们是resolve
还是reject
,我都想运行一些代码。我正在尝试利用async/await模式,因为它看起来更好。:)
这是我正在做的事情:
var promises = []
for ( item in list ) {
prom = AsyncFunction( item )
promises.push(prom)
}
await Promise.all(promises)
doMoreAfter()
然而,一些承诺失败了,第二个发生的Promise.all()
也失败了。
我只想忽略任何失败的承诺,并在所有承诺完成后运行下一个代码。
我找到了这样的解决方案。
Promise.all([a(), b(), c()].map(p => p.catch(e => e)))
.then(results => console.log(results)) // 1,Error: 2,3
.catch(e => console.log(e));
但是当试图将其转换为async/await格式时,它看起来不起作用。
await Promise.all(promises.map(p => p.catch(e => e)))
我错过了什么?
3条答案
按热度按时间3bygqnnd1#
我觉得你能做的就是:
https://jsfiddle.net/DerekL/h5Lmxaqq/
也可以创建一个
ignore
函数:https://jsfiddle.net/DerekL/mwkww7w9/
lnxxn5zx2#
我试着这样运行你的例子:https://jsfiddle.net/804ogadu/3/
我确实得到了所需的结果
vvppvyoh3#
您是否考虑过使用
Promise.allSettled()
?(https://developer.mozilla.org/en-US/docs/Web/JavaScript/参考/全局对象/承诺/所有已解决#using_promise. allsettled)