「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 配列からパラメータを渡して実行をシーケンスする方法は?

配列からパラメータを渡して実行をシーケンスする方法は?

2024 年 11 月 18 日に公開
ブラウズ:882

How to Sequence Promise Execution with Parameter Passing from an Array?

配列から渡されるパラメーターによる Promise の順次実行

値の配列 (例: myArray) があり、Promise を実行する必要があるシナリオを考えてみましょう。ベースの関数 (myPromise など) を順番に実行し、各配列要素をパラメータとして渡します。 Promise が正しい順序で解決されることを保証する「一時停止可能なループ」を実装するにはどうすればよいですか?

解決策: 反復的な Promise 実行

順次実行を実現するには、Promise チェーンの組み合わせを使用できます。そして反復処理。これを行う方法を示すコード スニペットは次のとおりです。

myArray.reduce(
  (p, x) =>
    p.then(() => myPromise(x)),
  Promise.resolve()
)

このアプローチでは、reduce メソッドを利用して配列を反復処理し、一連の連鎖された Promise を作成します。各 Promise は前の Promise が完了した後に解決され、目的の実行シーケンスが効果的に強制されます。

非同期関数の代替

非同期関数をサポートしている場合は、forEachSeries を使用したよりクリーンなソリューションが利用可能です。 function:

const forEachSeries = async (iterable, action) => {
  for (const x of iterable) {
    await action(x)
  }
}

forEachSeries(myArray, myPromise)

この関数は配列を反復処理し、各要素で一時停止し、次の反復に進む前に Promise が解決されるのを待ちます。

結果の収集

Promise の戻り値を配列に収集する必要がある場合は、forEachSeries 関数を次のように変更できます。

const mapSeries = async (iterable, fn) => {
  const results = []

  for (const x of iterable) {
    results.push(await fn(x))
  }

  return results
}

この関数は配列を反復処理し、Promise の結果を結果配列に蓄積し、最後に収集された結果を返します。

リリースステートメント この記事は次の場所に転載されています: 1729407377 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3