本文最后更新于 2024年4月4日 下午
从ES5、ES6+的角度实现一个sleep函数。
ES6+
主要方式包括:Promise(常用)、Async/Await(常用)、Generator(较少使用)。
Promise
1 2 3 4 5 6
| const sleep = time => new Promise(resolve => setTimeout(resolve, time))
sleep(1000).then(res => { console.log('Promise'); })
|
Async/Await
1 2 3 4 5 6 7 8 9 10
| const sleep = time => new Promise(resolve => setTimeout(resolve, time))
async function output() { console.log('Async/Await---Start'); await sleep(1000); console.log('Async/Await---End'); }
output();
|
Generator
1 2 3 4 5 6 7 8
| function* sleepGenerator(time) { yield new Promise(resolve => setTimeout(resolve, time)) }
sleepGenerator(1000).next().value.then(() => { console.log('Generator'); })
|
ES5
ES5主要通过setTimeout回调函数的方式实现。
使用回调
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function sleep(callback, time) { if (typeof callback === 'function') { setTimeout(callback, time); } else { console.log('回调函数错误'); } }
function output() { console.log('回调'); }
sleep(output, 1000);
|