ホームページ >ウェブフロントエンド >jsチュートリアル >setTimeout() を Promise チェーンに適切に組み込む方法は?
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 サイトの他の関連記事を参照してください。