Promise ループの同期実行を実現する
ループ反復中の Promise 呼び出しとその連鎖ロギング操作の同期性をどのように確保しますか? promisewhile() を使用する最初のアプローチは有望に見えますが、適切な実行順序の保持について懸念が生じます。
代わりに、このタスクには Promise の固有の機能を活用することを検討してください。ユーザーの詳細を取得し、元の応答順序を維持するための一連の非同期呼び出しとして問題を定義することで、Array.prototype.reduce() を利用してフラットな .then() チェーンを構築できます。
解決策:
次のコードは、このアプローチの例です。
<code class="javascript">function fetchUserDetails(arr) { return arr.reduce(function(promise, email) { return promise.then(function() { return db.getUser(email).done(function(res) { logger.log(res); }); }); }, Promise.resolve()); }</code>
この関数は、電子メール アドレスの配列を受け取り、Promise を返します。 reduce() 関数は配列を反復処理し、電子メールごとに getUser Promise を実行します。結果は、done() コールバックに同期的に記録されます。
関数の呼び出し:
関数を呼び出すには、電子メール アドレスの配列 (arrayOfEmailAddys) を設定し、次を使用します。次のようになります:
<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() { console.log('all done'); });</code>
このコードは線形 Promise チェーンを作成し、各 Promise が順番に解決され、ロギング操作が正しい順序で実行されることを保証します。
以上が順序を維持しながら Promise ループの同期実行を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。