我想做这样的事
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);
字符串
但它不工作,结束事件从来没有被调用,我还没有收到我的终端上的任何数据.
任何解决方案或技巧如何实现它?
2条答案
按热度按时间omtl5h9j1#
我是Scramjet的作者,这是一个功能性的流处理框架,对你来说可能是一个简单的解决方案。
如果你可以在你的项目中只添加3个依赖项,那么这再简单不过了:
字符串
如果你想自己实现它,看看DataStream第112行的源代码-它应该很容易实现。一般来说,你需要实现这样的东西:
型
上面的例子或多或少是在超燃冲压发动机中发生的事情-在保持更少的事件处理程序等方面有更多的优化,但是上面的例子在简单的情况下应该工作得很好。
zbsbpyhn2#
下面是非常基本的工作示例:
字符串