1-1 普通版
function sleep() {
var start = new Date()
while(new Date() - start <= sleepTime) {}
var t1 = new Date()
sleep(3000)
var t2 = new Date()
console.log(t2 - t1)
}
1-2JS实现sleep,用promise
function sleep(time) {
return new Promise(resolve => setTimeout(resolve, time))
}
const t1 = new Date();
sleep(3000).then(()=>{
const t2 = new Date()
console.log(t2-t1)
})
- 优点: 使用了setTimeout,没有形成进程阻塞,不会造成性能和负载问题
- 缺点: 变成纵向then回调,当我们需要在某过程中停止执行(或者在中途返回错误的值),必须得层层判断后跳出,这种异步不是那么彻底
2-3 async/await版本
function sleep (delay) {
return new Promise(resolve => {
setTimeout(resolve,delay)
})
}
(async function test() {
const t1 = new Date()
await sleep(3000)
const t2 = new Date();
log(t2 - t1)
}())