【发布时间】:2019-07-18 22:17:55
【问题描述】:
我想做这样的事情
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);
但它不起作用,end 事件从未被调用,我的终端上也没有收到任何数据。
关于如何实现它的任何解决方案或提示?
【问题讨论】:
-
您是否遇到任何错误,尤其是未处理的承诺拒绝?尝试将
.catch(console.error)附加到您的 IIAFE。 -
IIRC 当您使用
for await of时,result不会是迭代记录,而是值本身。生成器完成后,循环就结束了。 -
为每个 Promise 分别调用的
async function和await就像一个生成器。甚至可以将它们结合起来吗?
标签: javascript node.js promise async-await