我想要做类似这样的事情。
const { Readable } = require("stream");
function generatorToStream(generator) {
return new Readable({
read() {
(async () => {
for await (const result of generator()) {
if (result.done) {
this.push(null);
} else {
this.push(result.value);
}
}
})();
}
});
}
generatorToStream(async function*() {
const msg1 = await new Promise(resolve =>
setTimeout(() => resolve("ola amigao"), 2000)
);
yield msg1;
const msg2 = await new Promise(resolve =>
setTimeout(() => resolve("ola amigao"), 2000)
);
yield msg2;
const msg3 = await new Promise(resolve =>
setTimeout(() => resolve("ola amigao"), 2000)
);
yield msg3;
}).pipe(process.stdout);
但是它没有起作用,结束事件从未被调用,我在终端上也没有接收到任何数据。
有什么解决方案或实现技巧吗?
.catch(console.error)
。 - Bergifor await of
时,result
不会是一个迭代记录,而是它本身的值。当生成器完成时,循环就会结束。 - Bergiawait
的async函数
,每个Promise都单独调用,就像一个生成器一样。它们能否结合在一起呢? - zer00ne