Wait until all promises complete even if some rejected Wait until all promises complete even if some rejected javascript javascript

Wait until all promises complete even if some rejected


Update, you probably want to use the built-in native Promise.allSettled:

Promise.allSettled([promise]).then(([result]) => {   //reach here regardless   // {status: "fulfilled", value: 33}});

As a fun fact, this answer below was prior art in adding that method to the language :]


Sure, you just need a reflect:

const reflect = p => p.then(v => ({v, status: "fulfilled" }),                            e => ({e, status: "rejected" }));reflect(promise).then((v => {    console.log(v.status);});

Or with ES5:

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

Or in your example:

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 === "fulfilled");});


Similar answer, but more idiomatic for ES6 perhaps:

const a = Promise.resolve(1);const b = Promise.reject(new Error(2));const c = Promise.resolve(3);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));const console = { log: msg => div.innerHTML += msg + "<br>"};
<div id="div"></div>