龙空技术网

碎片时间学编程「37]:如何在 JavaScript 中实现Sleep功能?

路条编程 88

前言:

今天同学们对“js中断执行”都比较关心,姐妹们都想要学习一些“js中断执行”的相关内容。那么小编在网上搜集了一些关于“js中断执行””的相关内容,希望咱们能喜欢,大家一起来了解一下吧!

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和 await 关键字。请注意,生成的函数必须在函数中执行,并且必须使用以下命令调用: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) 

更多技术内容请访问:

标签: #js中断执行 #js休眠3秒