ホームページ  >  記事  >  ウェブフロントエンド  >  配列からパラメータを渡して実行をシーケンスする方法は?

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-20 14:57:02373ブラウズ

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 の結果を結果に蓄積します。配列を取得し、最後に収集された結果を返します。

以上が配列からパラメータを渡して実行をシーケンスする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。