JavaScript 没有sleep()
开箱即用的功能。考虑到它运行的环境以及如果使用不当可能导致的问题,这可能是一个好主意。最接近的等价物是setTimeout()
函数,但还有其他不太常见的方法来实现将暂停执行指定时间量的函数。
设置超时
JavaScriptsetTimeout()
设置了一个计时器,一旦计时器到期,它就会执行一些代码。只有setTimeout()
回调中的代码会在计时器到期后执行。如果您不小心,这可能会导致嵌套问题以及乱序执行的代码。
const printNums = () => {
console.log(1);
setTimeout(() => console.log(2), 500);
console.log(3);
};
printNums(); // Logs: 1, 3, 2 (2 logs after 500ms)
同步版本
虽然强烈不鼓励,Date.prototype.getTime()
但可以在while
循环内使用以暂停执行一段时间。您可以像这样轻松定义同步sleep()
函数:
const sleepSync = (ms) => {
const end = new Date().getTime() + ms;
while (new Date().getTime() < end) { /* do nothing */ }
}
const printNums = () => {
console.log(1);
sleepSync(500);
console.log(2);
console.log(3);
};
printNums(); // Logs: 1, 2, 3 (2 and 3 log after 500ms)
异步版本
实现sleep()
函数的一种不那么侵入性的方法是利用JavaScript ES6 中添加的async
and关键字,a和. 请注意,生成的函数必须在函数中执行,并且必须使用以下命令调用:await
Promise
setTimeout()
async
await
const sleep = (ms) =>
new Promise(resolve => setTimeout(resolve, ms));
const printNums = async() => {
console.log(1);
await sleep(500);
console.log(2);
console.log(3);
};
printNums(); // Logs: 1, 2, 3 (2 and 3 log after 500ms)