sleep()函数
面试的时候有这样一个问题,怎样写一个函数,等待几分钟去检查某一事件是否发生。我的第一反应是JavaScript里的setTimeout()
方法
setTimeout(function(){ alert("Hello"); }, 3000);
借助 Promise,我们可以对setTimeout
函数进行改良,下面就是把setTimeout()
封装成一个返回Promise的sleep()
函数。
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
// 用法
sleep(500).then(() => {
// 这里写sleep之后需要去做的事情
})
这里需要提到的一个问题是,这个sleep()
在执行的时候是“block”程序的继续执行的。它不是同步的。如果想让它同步执行,不妨碍执行之后的代码,我们可以使用async/await
关键字。
(async function() {
console.log('Do some thing, ' + new Date());
await sleep(3000);
console.log('Do other things, ' + new Date());
})();