概要
- JS forEach内部でawaitが使えなかった際に対処した備忘録
詳細
- LambdaからSQSにメッセージ送信する際に、sendMessage関数をforEach内部で実行していた。
- いざLambdaを動かすと、SQSにメッセージが送信されていなくて困った
対処法
理由
- Mozillaに書いてあるが、
forEach does not wait for promises.
- qiitaの記事でforEachのpolyfillを解説を見た。forEachはasyncではないのか。
- そのため、promiseの処理結果を待たずにイテレートする。
- Mozillaに載っているforEachでawaitが使えないコード例
1let ratings = [5, 4, 5];
2let sum = 0;
3let sumFunction = async function (a, b) {
4 return a + b;
5};
6
7ratings.forEach(async function (rating) {
8 sum = await sumFunction(sum, rating);
9});
10
11console.log(sum);
12// Naively expected output: 14
13// Actual output: 0