使用JavaScript实现休眠或等待


当前第2页 返回上一页

如前所述,setTimeout() 实际上不是 sleep() 函数,取而代之的是,它只是将异步代码排入队列以供以后执行。幸运的是,可以使用 setTimeout() 在JavaScript中创建自己的 sleep() 函数。

如何编写sleep函数

通过Promises,asyncawait 的功能,您可以编写一个 sleep() 函数,该函数将按预期运行。

但是,你只能从 async 函数中调用此自定义 sleep() 函数,并且需要将其与 await 关键字一起使用。

这段代码演示了如何编写一个 sleep() 函数:

1

2

3

4

5

6

7

8

9

10

11

const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))

 

const repeatedGreetings = async () => {

  await sleep(1000)

  console.log(1)

  await sleep(1000)

  console.log(2)

  await sleep(1000)

  console.log(3)

}

repeatedGreetings()

此JavaScript sleep() 函数的功能与您预期的完全一样,因为 await 导致代码的同步执行暂停,直到Promise被解决为止。

一个简单的选择

另外,你可以在第一次调用 setTimeout() 时指定增加的超时时间。

以下代码等效于上一个示例:

1

2

3

setTimeout(() => console.log(1), 1000)

setTimeout(() => console.log(2), 2000)

setTimeout(() => console.log(3), 3000)

使用增加超时是可行的,因为代码是同时执行的,所以指定的回调函数将在同步代码执行的1、2和3秒后执行。

它会循环运行吗?

如你所料,以上两种暂停JavaScript执行的选项都可以在循环中正常工作。让我们看两个简单的例子。

这是使用自定义 sleep() 函数的代码段:

1

2

3

4

5

6

7

8

9

const sleep = (delay) => new Promise((resolve) => setTimeout(resolve, delay))

 

async function repeatGreetingsLoop() {

  for (let i = 0; i <= 5; i++) {

      await sleep(1000)

    console.log(`Hello #${i}`)

    }

}

repeatGreetingsLoop()

这是一个简单的使用增加超时的代码片段:

1

2

3

for (let i = 0; i <= 5; i++) {

  setTimeout(() => console.log(`Hello #${i}`), 1000 * i)

}

我更喜欢后一种语法,特别是在循环中使用。

总结

JavaScript可能没有 sleep()wait() 函数,但是使用内置的 setTimeout() 函数很容易创建一个JavaScript,只要你谨慎使用它即可。

就其本身而言,setTimeout() 不能用作 sleep() 函数,但是你可以使用 asyncawait 创建自定义JavaScript sleep() 函数。

采用不同的方法,可以将交错的(增加的)超时传递给 setTimeout() 来模拟 sleep() 函数。之所以可行,是因为所有对setTimeout() 的调用都是同步执行的,就像JavaScript通常一样。

希望这可以帮助你在代码中引入一些延迟――仅使用原始JavaScript,而无需外部库或框架。

祝您编码愉快!

英文原文地址:https://medium.com/dev-genius/how-to-make-javascript-sleep-or-wait-d95d33c99909

作者:Dr. Derek Austin

更多编程相关知识,请访问:编程视频!!

以上就是使用JavaScript实现休眠或等待的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

javascript中日期如何转为时间戳

javascript逻辑运算符有哪些

javascript中json的方法有哪些

javascript和java有什么区别

javascript知识点总结之 文档对象模型

深入了解javascript中的语法和代码结构

javascript字符串怎么进行编码转换

javascript怎么设置字体颜色

javascript如何删除数组元素

javascript深度优先遍历(dfs)和广度优先遍历(bfs)算法的介绍

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...