使用ES6的promise,有时可能会有这样一种需求:休眠xxx毫秒之后再执行指定的promise。可通过下面的方式实现。
1、定义延迟休眠函数
延迟休眠函数仍然返回一个Promise对象,便于和原有的Promise做链式调用。原理是使用js原生的setTimeout方法,代码如下
/**
* 定义休眠函数
* @param {number} msTime 休眠时间,毫秒
*/
let sleep = msTime => {
return new Promise(resolve => setTimeout(resolve({
success: true,
time: msTime
}), msTime));
};
2、使用方式
假设businessAction1和businessAction2是休眠前后需要执行的业务逻辑,则休眠使用方式如下
let businessAction1 = () => {
console.log('休眠前业务操作。。。');
return Promise.resolve()
};
let businessAction2 = res => {
console.log(`执行到这里,说明已休眠 ${res.time} 毫秒`);
console.log('休眠后业务操作。。。');
return Promise.resolve()
};
// 休眠调用
let call = () => {
businessAction1().then(() => {
return sleep(500);
}).then(res => {
return businessAction2(res);
});
}
在浏览器控制台执行结果如下