首页 >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