Как я могу создать Readable, который соединяется с Writable и позволяет мне время от времени добавлять в него контент?
То, что я хочу сделать, вероятно, легко, но после некоторой работы над этим реализация, которую я придумал, стала немного сложной.
Это то, что я хочу сделать: я хочу иметь возможность создавать 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)