让JavaScript函数暂停一段时间
原文:Make a JavaScript Function Sleep
JavaScript没有内置的sleep()
函数,但也可以通过其他方式让函数暂停一段时间。
许多语言有sleep()
函数,JavaScript却没有暂停执行一段时间的内置函数。主要原因是:在C一类的语言中,sleep(2)
阻塞当前线程2秒钟,而JavaScript是单线程的,C风格的sleep(2)
会阻塞整个JavaScript运行时2秒钟,是非常不实用的。
但是,在异步函数中,可以不阻塞JavaScript运行时,暂停一段时间。只需要await
一个一段时间后resolve
的Promise即可。
1 | function sleep(ms) { |
用new Promise()
构造器创建了一个新的ms
毫秒后resolve
的Promise。当await
这个Promise时,就能暂停执行当前函数,不影响其他函数。
例如,可以在两个函数中并行调用sleep()
,二者互相不会阻塞。
1 | const start = Date.now(); |