在本文中,我們將探討如何轉換setTimeout,一個在之後執行回調的函數指定的延遲,放入可用於處理非同步操作的Promise 中。
現代 JavaScript 支援原生 Promises,它提供了一種方便的方式來表示非同步操作。要將 setTimeout 轉換為 Promise,我們可以將其包裝在 Promise 建構函數中,並將解析函數作為回調傳遞:
function later(delay) { return new Promise((resolve) => { setTimeout(resolve, delay); }); }
此函數將傳回指定延遲後解析的 Promise。
如果您喜歡創建自己的Promise 實現,您可以定義一個Promise 原型並將其用作如下:
function setTimeoutReturnPromise() { function promise() { } promise.prototype.then = function() { console.log('timed out'); }; setTimeout(() => { return this; // Return the promise object }, 2000); return new promise(); }
要建立可取消的Promise,我們可以將setTimeout包裝在提供取消方法的自訂物件中:
const later = (delay, value) => { 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; } } }; };
這個物件傳回一個 Promise 和一個可用於終止操作的取消方法。
以上是如何在 JavaScript 中將 `setTimeout` 變成 Promise?的詳細內容。更多資訊請關注PHP中文網其他相關文章!