用Promise封装一个定时器函数,这个函数会在指定时间后 resolve,并返回设定的结果值。
下面是实现代码,这个封装的定时器可以像原生Promise一样使用then、catch和finally方法:
/**
* 用Promise封装的定时器函数
* @param {number} delay 延迟时间(毫秒)
* @param {any} value 定时器结束后要返回的值
* @returns {Promise} 返回一个Promise对象
*/
function delay(delay, value) {
return new Promise((resolve) => {
// 使用setTimeout实现延迟
setTimeout(() => {
// 延迟结束后resolve,并传递value
resolve(value);
}, delay);
});
}
// 使用示例
console.log('开始执行');
// 1秒后输出"1秒后执行"
delay(1000, "1秒后执行")
.then(result => {
console.log(result);
// 可以继续链式调用,再延迟2秒
return delay(2000, "再等2秒后执行");
})
.then(result => {
console.log(result);
return delay(1500); // 也可以不传递返回值
})
.then(() => {
console.log("又过了1.5秒");
})
.finally(() => {
console.log("所有定时任务完成");
});
这个封装的定时器函数有以下特点:
- 接收两个参数:延迟时间(毫秒)和要返回的值
- 返回一个Promise对象,在指定延迟后会resolve并返回设定的值
- 支持链式调用,可以很方便地实现多个连续的定时操作
- 可以配合then、catch(虽然这里不会reject,但可以捕获上游错误)和finally使用