ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript で Promise を反復処理するときに同期ロギングを実現するにはどうすればよいですか?

JavaScript で Promise を反復処理するときに同期ロギングを実現するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 21:43:02428ブラウズ

How to Achieve Synchronous Logging When Iterating Through Promises in JavaScript?

同期を使用した Promise 呼び出しの反復

一般的なシナリオには、実行順序が確実に維持されるように、API リクエストなどの一連の Promise 呼び出しをループすることが含まれます。 。 Bluebird は、promisewhile 関数を通じてソリューションを提供します。ただし、ループ内の logger.log(res) 呼び出しの順序について懸念があります。

提案された解決策

promisewhile を使用する代わりに、次のアプローチを検討してください:

<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>

このコード:

  1. Promise の配列を作成します: 電子メール アドレスの配列 (arr) を受け入れ、各電子メールに基づいて一連の Promise を作成します。
  2. reduce によるシリアル実行: Array.prototype.reduce を利用して、Promise を順番に実行します。
  3. 保証された順序: then で Promise を連鎖させることで、これにより、前の Promise が解決された後にのみ logger.log(res) が呼び出されるようになります。

使用例

電子メール アドレスの配列を使用して fetchUserDetails 関数を呼び出します。

<code class="javascript">// Compose an array of email addresses
const arrayOfEmailAddys = [...];

fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});</code>

このアプローチでは、logger.log(res) 呼び出しの必要な同期を維持しながら、再帰、外部カウンター、および複雑な条件関数の必要性が排除されます。

以上がJavaScript で Promise を反復処理するときに同期ロギングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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