値の配列 (例: myArray) があり、Promise を実行する必要があるシナリオを考えてみましょう。ベースの関数 (myPromise など) を順番に実行し、各配列要素をパラメータとして渡します。 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 の結果を結果配列に蓄積し、最後に収集された結果を返します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3