1

我想做的事情可能很简单,但是在研究了一段时间之后,我想出的实现有点复杂。

这就是我想要做的:我希望能够创建一个 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)
4

0 回答 0