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

How to delay a loop in a generator function in 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 不再包含在生成器函数中,而是一个正常的回调。

我该如何解决这个问题?

由于同步代码使用了生成器,延迟的唯一方法是同步阻塞,这意味着您的整个线程将阻止。如果您需要异步延迟,调用代码需要适应异步调用。虽然真的,但我觉得发电机首先延迟似乎很奇怪。如有必要,发电机的 消费者 应该对时间有发言权,而不是发电机。