首頁 > web前端 > js教程 > 主體

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

Susan Sarandon
發布: 2024-10-31 16:02:02
原創
535 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!