我想做的事情可能很简单,但是在研究了一段时间之后,我想出的实现有点复杂。
这就是我想要做的:我希望能够创建一个 Readable 并将其通过管道传输到 Writable,并且能够不时(异步)向 Readable 添加其他数据,并让它继续将数据传输到可写,然后稍后将其关闭。
以下解决方案可能有效(我没有对其进行太多测试),但它似乎太复杂而无法正确执行此操作。
这样做的正确和简单的方法是什么?
const fs = require('fs');
const {
Readable
} = require('stream');
const writable = fs.createWriteStream('./foo.log', {
flags: 'w'
});
const asyncIterable = {
concat: function(char) {
setImmediate(() => {
this.resolve({
value: char,
done: false
});
});
},
close: function() {
setImmediate(() => {
this.resolve({
done: true
});
});
},
[Symbol.asyncIterator]: function() {
return {
next: () => {
return new Promise((r, j) => {
this.resolve = r;
});
}
}
}
};
let readable = Readable.from(asyncIterable);
readable.pipe(writable);
let i = setInterval(() => {
asyncIterable.concat(':-)');
}, 1000)
setTimeout(() => {
clearInterval(i);
asyncIterable.close();
}, 10000)