首頁 >web前端 >js教程 >如何正確地將 setTimeout() 合併到 Promise 鏈中?

如何正確地將 setTimeout() 合併到 Promise 鏈中?

Susan Sarandon
Susan Sarandon原創
2024-10-31 16:02:02635瀏覽

How to Properly Incorporate setTimeout() into Promise Chains?

在 Promise 鏈中使用 setTimeout()

使用 Promise 時,了解如何處理 Promise 鏈中的非同步操作至關重要。在給定的程式碼片段中,目的是延遲承諾鏈中後續請求的執行。但是,直接在 .then() 處理程序中使用 setTimeout() 可能會導致問題。

為什麼 setTimeout() 失敗

在您的程式碼中,setTimeout() 是在第二個要求的 .then() 處理程序中使用。但是,這種方法會破壞 Promise 鏈,因為 .then() 處理程序的回傳值不是 Promise。 setTimeout() 回呼包含要連結的 Promise,在其自身上下文之外無法存取。

使用延遲函數的解決方案

維護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.delay

另一種選擇是使用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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn