4

我知道你们都会喜欢“使用计时器!” 但让我解释一下。我正在制作类似宏的东西,我需要以特定延迟执行功能。我知道它可以用定时器来完成,但是如果代码中有 50 个定时器和 50 个回调,代码会如何呢?有了睡眠,它可以在一个功能中变得很好。由于网络工作者在单独的线程上运行,因此不存在冻结问题。

我只知道不吃cpu就可以睡觉的两种方法:

  1. 向一个特殊的后端发出一个同步的 xhr 请求,该后端休眠 x 秒,由 GET 给出。虽然这可行,但它确实很不方便,并且取决于对服务器的 ping 操作。
  2. 使用生成器函数(yield)并向启动计时器的主线程发送消息。当计时器执行时,消息被发送回工作人员以继续执行。这是一个非常好的解决方案,但据我所知,它仅在 Firefox 中可用。Chrome 不支持生成器功能。

还有其他实现睡眠功能的方法吗?

4

1 回答 1

0

有解决方案 - 自旋锁。

var d1 = Date.now();
while(Date.now() < d1+50) {
     // do nothing
}

当然,这不是最优的。您的问题表明您已经考虑过生成器。生成器非常适合解决此类问题。但是我们可以使用生成器吗?生成器的本机语法并未在浏览器中广泛采用。

但是我们可以使用解决方案构建来支持 ES5 中的生成器。您可以使用以下转译器:

于 2014-12-12T15:46:59.733 回答