首頁 >web前端 >js教程 >如何在 JavaScript 中將 `setTimeout` 變成 Promise?

如何在 JavaScript 中將 `setTimeout` 變成 Promise?

Barbara Streisand
Barbara Streisand原創
2024-12-05 07:08:09513瀏覽

How Can I Turn `setTimeout` into a Promise in JavaScript?

將setTimeout 轉換為Promise

概述

在本文中,我們將探討如何轉換setTimeout,一個在之後執行回調的函數指定的延遲,放入可用於處理非同步操作的Promise 中。

Native Promises

現代 JavaScript 支援原生 Promises,它提供了一種方便的方式來表示非同步操作。要將 setTimeout 轉換為 Promise,我們可以將其包裝在 Promise 建構函數中,並將解析函數作為回調傳遞:

function later(delay) {
    return new Promise((resolve) => {
        setTimeout(resolve, delay);
    });
}

此函數將傳回指定延遲後解析的 Promise。

自訂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

要建立可取消的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中文網其他相關文章!

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