ホームページ  >  記事  >  ウェブフロントエンド  >  Promise オペレーションで同期ループを確実に実行するにはどうすればよいですか?

Promise オペレーションで同期ループを確実に実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 00:13:291005ブラウズ

How to Ensure Synchronous Loop Execution with Promise Operations?

Promise を使用したループの調整

問題ステートメント

ループが同期的に反復され、各反復のPromise とその後のログ操作 (logger.log(res)) は正しい順序で実行されますか?

Solution

Eschewing Promisewhile

promisewhile 関数は、promise によるループを容易にしますが、連鎖操作の実行順序は保証しません。

シリアル化に Reduce を使用する

必要な処理を維持するには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>

使用例

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

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

利点

このアプローチでは、 Promisewhile メソッドには追加の変数と条件関数が必要です。さらに、コードが簡素化され、Promise 実行の正しい順序が確保されます。

以上がPromise オペレーションで同期ループを確実に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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