布団の中にいたい

Elasticsearchいじったり、Androidアプリ書いたり。最近は数学の勉強が楽しくなってきました。

async/await で複数のAPIを非同期に処理する

一つの画面で複数のAPIを叩く時にだいぶ遅くなっていてハマったのでメモ。

最初はだいたい以下のように書いていたのですが、この場合だとrequest1の処理が完了 → request2の処理というように非同期で処理する意味があまりない形になっていました。

async function sample() {
    await request1(arg1);
    await request2(arg2);
}

なんとかならないかと思っていた所、async/awaitはPromiseを返すということがわかったので、Promise.allですべて実行する形にしてすべてが終了してから次の処理に進む形にした所、ある程度早くなりました。

Promise.allのドキュメントは以下。

Promise.all() - 複数のPromise関数を実行し、全ての結果を得る | JavaScriptリファレンス

変更したコードはだいたい以下のような感じ。

async function sample() {
  const reqs = [{
    request: req1
    args: arg1
  },{
    request: req2,
    args: arg2,
  }]

  await Promise.all(reqs.map(req => req.request(req.args)))
}