sleep(1000) 意味着等待1000毫秒执行
想到延迟很容易会用setTimeout函数,但由于这是异步操作无法同步化,那么利用好promise这个问题就很好解决了!!
const sleep = time=>{
return new Promise(resolve=>setTimeout(resolve,time))
}
那么new Promise(resolve=>setTimeout(resolve,time))
就是sleep函数的核心了
//ES5写法
var sleep = function(time){
return new Promise(function(resolve){
return setTimeout(function(){
resolve()
},time)
})
}
sleep(1000).then(()=>{
console.log(1)
})
更早之前,ES5的时候都是使用回调的形式
function sleep(callback,time){
if(typeof callback==='function'){
setTimeout(callback,time)
}
}
function out(){
console.log(1)
}
sleep(out,1000)
这样并没有同步化,其实不是很好,还是建议使用promise
// async awit
function sleep(time) {
return new Promise(resolve => setTimeout(resolve,time))
}
async function output() {
let out = await sleep(1000);
console.log(1);
return out;
}
output();
还可以配合generator函数
function * generator(time){
yield new Promise(resolve=>setTimeout(resolve,time))
}
generator(1000).next().value.then(()=>{
console.log(1)
})
这玩意其实还有一种玩法
function * generator(time){
yield new Promise(resolve=>setTimeout(resolve,time))
yield new Promise(resolve=>setTimeout(resolve,time*2))
yield new Promise(resolve=>setTimeout(resolve,time*3))
yield new Promise(resolve=>setTimeout(resolve,time*4))
yield new Promise(resolve=>setTimeout(resolve,time*5))
}
for( i of generator(1000)){
i.then(()=>{
console.log(1)
})
}
网友评论