Last active
May 28, 2020 04:31
-
-
Save kawaz/9113d60cade5ef0a6d004341986b5abd to your computer and use it in GitHub Desktop.
Promiseの配列を {ok:true, value} か {ok:false, err} の配列にする関数。Promise.all とか Promise.race だとどれか一つのPromiseがrejectとかされた時点で全部中断されちゃうのが使いにくい時があるので。→ ES2020に入ってくる Promise.allSettled() がほぼ同じ感じの関数になるので今後はそっちを使う事を推奨。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
parallel = promises => Promise.all(promises.map(p=>new Promise(done=>{try{p.then(value=>done({ok:true,value})).catch(err=>done({ok:false,err}))}catch(err){done({ok:false,err})}}))) |
Promise.allSettled が 2019-07 で Stage4 になってたので ES2020 に入ってくるようだ。Chrome 80 から使えてたようで実行イメージは↓こんな感じ。
Promise
オブジェクト以外は単純に渡した値がそのまま "fullfilled"
の value
で返ってくるみたいだね。Function や AsyncFunction を勝手に Promise 化して実行するようなことはしないっぽい。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
こんな感じの結果が得られる。
parallel
関数の実行自体は配列が渡される限りは失敗しない(ハズ)。↓
最後の2個はこんな感じのエラーオブジェクトが入ってるイメージ