💍
カッコ良くPromise.allするやつ
カッコ良いやつ
reduceの生成先の配列をpromiseの配列にしてpromise.allするやつ。
promise.allを素で使うで多分大体のケースが収まるが、このパターンならオブジェクト単位でpromiseをまとめてwaitしたい時とか、promiseを後から増やしたりしたい時にシンプルに書ける?かも。
Webpackのチャンクをロードする際にはこの方法が取られていた。
(async () => {
const objects = {
// ここではやってないが呼び出し先でまたarrにpromiseを突っ込めば勝手に待ってくれる
hoge: (arr) => arr.push(wait(3), wait(4)),
moge: (arr) => arr.push(wait(2), wait(1)),
};
const run = () =>
Object.keys(objects).reduce(
(prev, curr) => (
(() => {
prev.push(objects[curr](prev));
})(),
prev
),
[]
);
await Promise.all(run());
console.log("end");
async function wait(num) {
return new Promise((a) =>
setTimeout(() => (console.log(num), a()), num * 1000)
);
}
})();
Discussion
ここの部分少しアプローチ変えてやってみました
定義側
使用側
demo code.