方式一:使用Promise + then
const sleep = time => {
return new Promise(resolve => {
setTimeout(resolve,time)
})
}
var start = new Date().getTime();
sleep(2000).then(() => {
console.log(1);
var end = new Date().getTime();
console.log(end-start+'ms');
})
方式二:使用生成器函数 + then
function* sleep(time) {
yield new Promise(resolve => {
setTimeout(resolve, time)
})
}
var start = new Date().getTime();
sleep(2000).next().value.then(() => {
console.log(1);
var end = new Date().getTime();
console.log(end - start + 'ms');
})
方式三:使用async + await
function sleep(time) {
return new Promise(resolve => {
setTimeout(resolve, time)
})
}
var start = new Date().getTime();
async function output() {
await sleep(2000);
var end = new Date().getTime();
console.log(end - start + 'ms');
}
output()
方式四:直接通过setTimeout实现
function sleep(callback,time) {
setTimeout(callback,time);
}
const start = new Date().getTime();
function output() {
console.log(111);
const end = new Date().getTime();
console.log(`${end - start} ms`);
}
sleep(output,2000)
RQ:为什么定时器执行后存在时间误差?