Как я могу создать 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)

0 ответов

Другие вопросы по тегам