首页 > web前端 > js教程 > 如何在 JavaScript 中将 `setTimeout` 变成 Promise?

如何在 JavaScript 中将 `setTimeout` 变成 Promise?

Barbara Streisand
发布: 2024-12-05 07:08:09
原创
576 人浏览过

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

将 setTimeout 转换为 Promise

概述

在本文中,我们将探讨如何转换 setTimeout,一个在之后执行回调的函数指定的延迟,放入可用于处理异步操作的 Promise 中。

Native Promises

现代 JavaScript 支持原生 Promises,它提供了一种方便的方式来表示异步操作。要将 setTimeout 转换为 Promise,我们可以将其包装在 Promise 构造函数中,并将解析函数作为回调传递:

1

2

3

4

5

function later(delay) {

    return new Promise((resolve) => {

        setTimeout(resolve, delay);

    });

}

登录后复制

此函数将返回一个在指定延迟后解析的 Promise。

自定义 Promise

如果您更喜欢创建自己的 Promise 实现,您可以定义一个 Promise 原型并将其用作如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

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 包装在提供取消方法的自定义对象中:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板