ホームページ >ウェブフロントエンド >jsチュートリアル >setTimeout() を Promise チェーンに適切に組み込む方法は?

setTimeout() を Promise チェーンに適切に組み込む方法は?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 16:02:02639ブラウズ

How to Properly Incorporate setTimeout() into Promise Chains?

Promise チェーンでの setTimeout() の使用

Promise を使用する場合、Promise チェーン内での非同期操作の処理方法を理解することが重要です。指定されたコード スニペットでは、Promise チェーンの後続のリクエストの実行を遅らせることが目的です。ただし、.then() ハンドラー内で setTimeout() を直接使用すると、問題が発生する可能性があります。

setTimeout() が失敗する理由

コードでは、setTimeout() は次のようになります。 2 番目のリクエストの .then() ハンドラー内で使用されます。ただし、.then() ハンドラーの戻り値は Promise ではないため、このアプローチでは Promise チェーンが壊れます。チェーンする Promise を含む setTimeout() コールバックは、独自のコンテキストの外ではアクセスできません。

遅延関数を使用した解決策

Promise チェーンを維持するには、Promise を返す別の遅延関数を作成できます:

<code class="javascript">function delay(t, val) {
    return new Promise(resolve => setTimeout(resolve, t, val));
}</code>

次に、Promise チェーンで遅延関数を使用します:

<code class="javascript">return delay(1000).then(function() {
    return getLinks(globalObj["two"] + ".txt");
});</code>

これは .then から Promise を返します。 () ハンドラー。これにより、後続のリクエストの実行が確実に遅延されます。

Promise.prototype.lay を使用する代替方法

別のオプションは、次のように Promise オブジェクトを拡張することです。遅延メソッド:

<code class="javascript">Promise.prototype.delay = function(t) {
    return this.then(function(val) {
        return delay(t, val);
    });
}</code>

このメソッドを使用すると、Promise で .delay() を直接呼び出すことができます:

<code class="javascript">Promise.resolve("hello").delay(500).then(function(val) {
    console.log(val);
});</code>

どちらのアプローチでも、Promise チェーンが正しく維持され、後続のリクエストは、指定された遅延の後に実行されます。

以上がsetTimeout() を Promise チェーンに適切に組み込む方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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