nodejs如何改造setTimeout函数,以实现sleep函数?
发布于 作者:苏南大叔 来源:程序如此灵动~

苏南大叔已经写过一篇有关php
中的sleep()
函数了,在本文中,将要和大家探讨的是:在js
中的sleep
函数。当然,这里的js
也包括nodejs
。主要目的就是:在执行某件事情的时候,可以稍稍的慢一下,延迟等待一小段时间。在js
中,一般都是使用setTimeout()
来实现这个目的的,当然,这里是需要一个回调函数了。

本文测试环境:win10
。这里的测试环境分两种,浏览器环境chrome@83.0.4103.61
,还有命令行里面的node
环境node@12.13.1
。本文中的sleep()
的单位是毫秒,不是秒。
setTimeout()
函数及改造
其实,js
里面并不原生存在sleep()
函数的,大家记忆里面的延迟操作是setTimeout()
。例如:
本文中,苏南大叔利用promise
来包装一下setTimeout()
来实现一个sleep()
。包装的sleep
代码如下:
使用方法
基于sleep()
函数的原本目的,就是用来block
一段时间的,所以,下面的使用方式,可能是最正确的选择:
注意:包含在async
内的await sleep(3000)
。在node xx.js
环境下,async
是必不可少的。但是在chrome
的f12
的console
中,是可以不写这个很奇怪的async
的。这是个很奇怪的体验,对吧?

当然,下面的.then()
链式表述方式,也是可以的。
但是,如果在这种表述的前方和后方各增加一句语句的话,就会发现:这种表述方式,并没有block
后面的语句的执行。执行的结果和setTimeout
是类似的感受。

测试代码

.then
的链式调用,block
的效果有限....

相关链接
当然了,如果您还不知道什么是promise
的话,可以看一下苏南大叔以前写的一篇文章:
苏南大叔对于php
下面的sleep
函数的解析:
总结
本文的主要内容是:利用promise
对setTimeout
进行包装,从而实现sleep
的效果。需要注意的是:单位是毫秒,而不是秒。
当然,关于js
下的sleep()
函数,还是有后续文章的,欢迎您点击苏南大叔的博客:


