0

我有一个需要同步返回可读流的函数。我有一个函数可以使用我需要的数据创建一个可读流,但它是一种异步方法。如何返回对同步流的引用?

class SomeStreamCreator {
    _requestStream() {
        fetchStream()
            .then(stream => /* stream is a Readable stream with data */)

        return /* somehow need to return the Readable stream here */
    }
}
4

1 回答 1

0

那么这一切都取决于您是否真的需要相同的确切流对象或只是相同的数据。在评论中提到的第一种情况下,它或多或少是不可能的。

如果您只是使用PassThrough内置stream模块中称为 available 的简单实用程序流,那么情况非常简单:

import {PassThrough} from "stream";

class SomeStreamCreator {
    _requestStream() {
        // first prepare an empty stream
        const out = new PassThrough();

        fetchStream() 
            // when the stream is ready pipe it to the empty one
            .then(stream => stream.pipe(out))
            // it's wise to add error handling
            .catch(error => stream.emit("error", e))

        // but immediately simply return the output
        return out;
    }
}

输出将接收来自原始流的所有数据,并且开销很小,因此您不必担心性能问题。

于 2019-08-08T12:14:20.130 回答