提供された記事に適合する質問形式のタイトルをいくつか示します。 * Promise チェーンを使用して同期実行を実現する方法: 簡略化された `promisewhile` および配列削減テクニックのガイド *S

Linda Hamilton
リリース: 2024-10-28 11:52:00
オリジナル
779 人が閲覧しました

Here are a few question-style titles that fit the provided article:

* How to Achieve Synchronous Execution with Promise Chains: A Guide to Simplified `promiseWhile` and Array Reduction Techniques
* Synchronous Promise Loops Made Easy:  `PromiseWhile` and

Promise チェーンを使用した同期ループの作成方法

問題:

ループの構築Promise 呼び出しと後続のログ ステートメントの同期実行が困難になる可能性があります。これは、Bluebird などのライブラリを使用する場合に特に当てはまります。

解決策 1 (簡略化されたpromisewhile 関数):

<code class="javascript">var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    loop();

    return resolver.promise;
};</code>
ログイン後にコピー

この簡素化されたバージョンのpromisewhile 関数では、コールバックを次のように渡す必要があります。

解決策 2 (配列削減の使用):

別のアプローチは、電子メール アドレスの配列を削減し、対応する非同期を作成することです。それぞれの呼び出し:

<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>
ログイン後にコピー

このアプローチはフラットな .then() チェーンを作成し、応答の元の順序を維持します。

使用法:

fetchUserDetails の呼び出しは電子メール アドレスの配列を受け取ります:

<code class="javascript">fetchUserDetails(arrayOfEmailAddys).then(function() {
    console.log('all done');
});</code>
ログイン後にコピー

このアプローチでは、外部のカウンターや条件関数が必要なくなります。制限は電子メール配列の長さによって決まります。

以上が提供された記事に適合する質問形式のタイトルをいくつか示します。 * Promise チェーンを使用して同期実行を実現する方法: 簡略化された `promisewhile` および配列削減テクニックのガイド *Sの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート