如何在JavaScript中的生成器函数中延迟循环?

我写了一个小的生成器,简单地列举了一些我交给它的消息:

'use strict'; const sequential = function * (messages) { for (let i = 0; i < messages.length; i++) { yield messages[i]; } }; module.exports = sequential; 

我这样使用它:

 for (const message of sequential(messages)) { // Do something to message... } 

基本上,一切工作正常。 现在我想让发生器延迟yield调用,例如100毫秒。

问题是,我不能简单地引入一个setTimeout调用,否则yield不再包含在生成器函数中,而是一个正常的callback。

我该如何解决这个问题?

由于同步代码正在使用生成器,因此延迟的唯一方法是同步阻止 ,这意味着您的整个线程将被阻塞。 如果您需要asynchronous延迟,则调用代码需要适应asynchronous调用。 虽然真的,但发电机首先是拖延的,这似乎很奇怪。 发电机的用户应该有必要的话,而不是发电机。