
将 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;
}, 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中文网其他相关文章!