如何在JavaScript Promise.all()

时间:2017-11-26 01:51:33

标签: javascript promise async-await

我正在尝试运行一个for循环,它将一堆异步请求排队。完成所有请求后,无论他们是resolve还是reject,我都希望运行一些代码。我试图利用async / await模式,因为它看起来更好。 :)

这就是我在做的事情:

var promises = []
for ( item in list ) {
    prom = AsyncFunction( item )
    promises.push(prom)
}

await Promise.all(promises)

doMoreAfter()

然而,一些承诺失败了,发生的第二个承诺Promise.all()也失败了。

我想简单地忽略任何失败的承诺,并在所有承诺完成后运行下一个代码。

我找到了像this这样的解决方案。

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)))

我错过了什么?

1 个答案:

答案 0 :(得分:0)

我尝试像这样运行你的例子: https://jsfiddle.net/804ogadu/3/

load

我确实得到了所需的结果

window.addEventListener('load', function() {
    // This code runs after all resources including images are loaded.
}, false);