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にブロックチェーンエンジニアとして入社。
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
まったく同じ問題でハマってました。
ありがとうございます。