# 1.Promise 实现 sleep
//Promise实现Sleep函数
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function test() {
console.log(new Date());
await sleep(3000);
console.log(new Date());
}
test();
console.log('continue execute!');
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
@[TOC]
sleep 函数作用是让线程休眠,等到指定时间在重新唤起。
# 方法一:伪死循环阻塞主线程
这种实现方式是利用一个伪死循环阻塞主线程。因为 JS 是单线程的。所以通过这种方式可以实现真正意义上的 sleep()。
function sleep(delay) {
var start = new Date().getTime();
while (new Date().getTime() - start < delay) {
continue;
}
}
function test() {
console.log("111");
sleep(2000);
console.log("222");
}
test();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 方法二:定时器
function sleep1(ms, callback) {
setTimeout(callback, ms);
}
//sleep 1s
sleep1(1000, () => {
console.log(1000);
});
1
2
3
4
5
6
7
2
3
4
5
6
7
# 方法三:es6 异步处理(Promise)
const sleep = (time) => {
return new Promise((resolve) => setTimeout(resolve, time));
};
sleep(1000).then(() => {
console.log(1);
});
1
2
3
4
5
6
2
3
4
5
6
# 方法四:es7---- async/await
async/await 是基于 Promise 的,是进一步的一种优化
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
async function output() {
let out = await sleep(1000);
console.log(1);
return out;
}
output();
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9