javascript foreachを連続して実行するには?

1330 ワード

やあ仲間、私が取り組んでいるコードには、データの配列を操作する非同期関数がいくつかあります.これを処理する方法は、標準の forEach 関数を使用することです.見つかった問題は、for ループのコールバックで待機しても、これは役に立たないことです.

const takesLongToRun = async additionalText => {
  setTimeout (() => {
    console.log (`Long function done :) ${additionalText}`);
  }, 3000);
};

const mainFunc = async () => {
  const numbers = [1, 2, 3, 4];

  numbers.forEach (async num => {
    console.log (num);
    await takesLongToRun (num);
  });
};

mainFunc ();


出力:

1
2
3
4
Long function done :) 1
Long function done :) 2
Long function done :) 3
Long function done :) 4


したがって、関数は順番に実行されますが、次の処理に進む前に各値が完了するのを待ちません.私が期待するのは次のとおりです.

1
Long function done :) 1
2
Long function done :) 2
3
Long function done :) 3
4
Long function done :) 4


少しグーグルで調べたところ、これは forEach の問題であり、代わりに構文の for が理論的には問題を解決しているように見えることがわかりました.以下のようにコードを変更しましたが、それでも同じように動作しました.

const mainFunc = async () => {
  const numbers = [1, 2, 3, 4];
  for (const num of numbers) {
    console.log (num);
    await takesLongToRun (num);
  }
};
mainFunc()


結果は同じです.以前に経験したことがある人からの洞察に本当に感謝します.ありがとう.