javascript – 等待所有ES6承诺完成,甚至拒绝承诺

让我说我有一组承诺,正在进行网络请求,哪一个会失败:

// http://does-not-exist will throw a TypeError
var arr = [ fetch('index.html'), fetch('http://does-not-exist') ]

Promise.all(arr)
  .then(res => console.log('success', res))
  .catch(err => console.log('error', err)) // This is executed   

让我说,我想等待,直到所有这些都已经完成,无论是否有失败。可能有一个网络错误的资源,我可以没有生活,但如果我可以得到,我想在我继续之前。我想要优雅地处理网络故障。

由于Promises.all没有为此留下任何空间,什么是处理这个的推荐模式,而不使用promises库?

最佳答案
当然,你只需要一个反映:

function reflect(promise){
    return promise.then(function(v){ return {v:v, status: "resolved" }},
                        function(e){ return {e:e, status: "rejected" }});
}


reflect(promise).then(function(v){
    console.log(v.status);
});

或在您的示例中:

var arr = [ fetch('index.html'), fetch('http://does-not-exist') ]

Promise.all(arr.map(reflect)).then(function(results){
    var success = results.filter(x => x.status === "resolved");
});

转载注明原文:javascript – 等待所有ES6承诺完成,甚至拒绝承诺 - 代码日志