实现一个sleep函数

本文最后更新于 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))

// 1秒后,打印‘Promise’
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');
}

// 先直接打印 Async/Await---Start,1秒后打印 Async/Await---End
output();

Generator

1
2
3
4
5
6
7
8
function* sleepGenerator(time) {
yield new Promise(resolve => setTimeout(resolve, time))
}

// 1秒后,打印‘Generator’
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('回调');
}

// 1秒后,打印‘回调’
sleep(output, 1000);

实现一个sleep函数
http://example.com/2021/05/25/11_实现一个sleep函数/
作者
Tan ChuYang
发布于
2021年5月25日
许可协议