在本文中,我们将探讨如何转换 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中文网其他相关文章!