首頁 > web前端 > js教程 > 如何將 setTimeout 函數變成 Promise?

如何將 setTimeout 函數變成 Promise?

Patricia Arquette
發布: 2024-11-25 01:42:18
原創
193 人瀏覽過

How to Turn a `setTimeout` Function into a Promise?

如何將setTimeout 變成Promise

為不傳回任何內容的函數建立Promise 的任務,例如setTimeout,最初可能具有挑戰性。為了理解這個概念,讓我們參考修改後的程式碼範例:

<br>function async(callback){<pre class="brush:php;toolbar:false">setTimeout(function(){
    callback();
}, 5000);
登入後複製

}

async(function(){

console.log('async called back');
登入後複製

});

我們的目標是產生一個承諾,一旦setTimeout回呼完成,非同步就可以回傳

Promise 的基本延遲

使用原生Promise,我們可以建立一個稍後呼叫的函數,如下:

 <br>稍後運行(延遲) {<pre class="brush:php;toolbar:false">return new Promise(function(resolve) {
    setTimeout(resolve, delay);
});
登入後複製

}

此函數會延遲(以毫秒為單位),並傳回一個在延遲到期後解析的 Promise。

< ;h3>帶有值的基本延遲

至稍後修改並允許它傳遞解析度值,我們需要確保 setTimeout 回呼接收該值作為參數。對於支援向 setTimeout 提供額外參數的瀏覽器,可以使用以下程式碼:

<br>function later(delay, value) {<pre class="brush:php;toolbar:false">return new Promise(function(resolve) {
    setTimeout(resolve, delay, value);
});
登入後複製

}

此程式碼確保該值傳遞給回調並隨後由

帶有值的可取消延遲

對於我們想要提供取消逾時功能的情況,我們可以建立一個有cancel 方法的對象,並Promise 的存取器。當呼叫cancel方法時,它會清除逾時並拒絕promise:

<br>const later = (delay, value) =>; {<pre class="brush:php;toolbar:false">let timer = 0;
let reject = null;
const promise = new Promise((resolve, _reject) => {
    reject = _reject;
    timer = setTimeout(resolve, delay, value);
});
return {
    get promise() { return promise; },
    cancel() {
        if (timer) {
            clearTimeout(timer);
            timer = 0;
            reject();
            reject = null;
        }
    }
};
登入後複製

};

此方法提供了一種取消待處理超時並拒絕相關承諾的方法。

以上是如何將 setTimeout 函數變成 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板