for文、forEach文のループ処理でasync/await、Promise.allを効果的に使う方法




forEachは非同期

forEachの中でasync/awaitを使って同期的に処理をしようとしても待たずにループ処理が行われます。

list.forEach( async element => {
    const data = await getData(element);
});

自分は最初これにハマってしまいましたのでお気をつけて。

for、for in、for ofは同期処理

for、for in、for ofはasync/awaitを使ってループ処理を同期的に行うことができます。これが一番シンプルだと思うので逐次処理として書くときは参考にしてください。

for (let i = 0: i < list.length < i ++ ) {
    const data = await getData(element);
});

for (let element in list) {
    const data = await getData(element);
}

async/awaitで並列処理するならPromise.allを使う

Promis.allとmapを組み合わせると綺麗にかけます。この処理の場合、mapの中でPromisオブジェクトを返すようにすることで、Promise.allが全ての要素の処理が終わるまで待つことができます。

Promise.all(list.map(async element => {
    return await getData(element);
}));

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




1 個のコメント

  • コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です