如何在 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
不再包含在生成器函数中,而是一个正常的回调。
我该如何解决这个问题?
由于同步代码使用了生成器,延迟的唯一方法是同步阻塞,这意味着您的整个线程将阻止。如果您需要异步延迟,调用代码需要适应异步调用。虽然真的,但我觉得发电机首先延迟似乎很奇怪。如有必要,发电机的 消费者 应该对时间有发言权,而不是发电机。
我写了一个小型生成器,它简单地枚举了我交给它的一堆消息:
'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
不再包含在生成器函数中,而是一个正常的回调。
我该如何解决这个问题?
由于同步代码使用了生成器,延迟的唯一方法是同步阻塞,这意味着您的整个线程将阻止。如果您需要异步延迟,调用代码需要适应异步调用。虽然真的,但我觉得发电机首先延迟似乎很奇怪。如有必要,发电机的 消费者 应该对时间有发言权,而不是发电机。