如前所述,setTimeout()
实际上不是 sleep()
函数,取而代之的是,它只是将异步代码排入队列以供以后执行。幸运的是,可以使用 setTimeout()
在JavaScript中创建自己的 sleep()
函数。
如何编写sleep函数
通过Promises,async
和 await
的功能,您可以编写一个 sleep()
函数,该函数将按预期运行。
但是,你只能从 async
函数中调用此自定义 sleep()
函数,并且需要将其与 await
关键字一起使用。
这段代码演示了如何编写一个 sleep()
函数:
1 2 3 4 5 6 7 8 9 10 11 |
|
此JavaScript sleep()
函数的功能与您预期的完全一样,因为 await
导致代码的同步执行暂停,直到Promise被解决为止。
一个简单的选择
另外,你可以在第一次调用 setTimeout()
时指定增加的超时时间。
以下代码等效于上一个示例:
1 2 3 |
|
使用增加超时是可行的,因为代码是同时执行的,所以指定的回调函数将在同步代码执行的1、2和3秒后执行。
它会循环运行吗?
如你所料,以上两种暂停JavaScript执行的选项都可以在循环中正常工作。让我们看两个简单的例子。
这是使用自定义 sleep()
函数的代码段:
1 2 3 4 5 6 7 8 9 |
|
这是一个简单的使用增加超时的代码片段:
1 2 3 |
|
我更喜欢后一种语法,特别是在循环中使用。
总结
JavaScript可能没有 sleep()
或 wait()
函数,但是使用内置的 setTimeout()
函数很容易创建一个JavaScript,只要你谨慎使用它即可。
就其本身而言,setTimeout()
不能用作 sleep()
函数,但是你可以使用 async
和 await
创建自定义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深度优先遍历(dfs)和广度优先遍历(bfs)算法的介绍
更多相关阅读请进入《javascript》频道 >>

Vue.js 设计与实现 基于Vue.js 3 深入解析Vue.js 设计细节
本书对 Vue.js 3 技术细节的分析非常可靠,对于需要深入理解 Vue.js 3 的用户会有很大的帮助。——尤雨溪,Vue.js作者