💍

カッコ良くPromise.allするやつ

2022/12/30に公開約700字

カッコ良いやつ

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

ログインするとコメントできます