Promise.all()でfail-fastしたくないときの対処法
普通にPromise.all([ promise1, promise2 ])と書いてしまうと、どれか失敗したときに失敗しなかった実行結果を取得できないので、成否に関わらず全部実行し終えるまで待ってほしいときにどうするか問題について。
参考情報: https://stackoverflow.com/questions/31424561/wait-until-all-es6-promises-complete-even-rejected-promises
一番良さそうな回答から抜粋↓
code:promise.ts
const reflect = p => p.then(v => ({v, status: "fulfilled" }),
e => ({e, status: "rejected" }));
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");
});
もうちょっと洗練されたやつ↓
https://gist.github.com/nhagen/a1d36b39977822c224b8
(追記)
→ Promise.allSettled() というのがあったりなかったりするらしい
#Javascript
#TypeScript
#非同期処理