如何在Nodejs中处理多个流?

时间:2017-12-15 04:19:44

标签: node.js stream concat

我正在编写图像处理服务,我必须将图像转换为多种尺寸

const writable1 = storage(name1).writableStream();
const writable2 = storage(name2).writableStream();
const writable3 = storage(name3).writableStream();

//piping the file stream to their respective storage stream
file.stream.pipe(imageTransformer).pipe(writable1);
file.stream.pipe(imageTransformer).pipe(writable2);
file.stream.pipe(imageTransformer).pipe(writable3);

我想知道所有流何时完成写入目的地

现在我只检查了一个流:

writable3.on('finish', callback);
//error handling
writable3.on('error', callback);

我见过像https://github.com/mafintosh/pumphttps://github.com/maxogden/mississippi这样的库,但这些库只显示写入多个转换的单个目标。

我如何能够检查所有流是否已完成写入或其中一个是否已出错?如何在数组中处理它们?

1 个答案:

答案 0 :(得分:0)

您可以使用组合转换流来承诺和let rec f i = function | [] -> [] | x::xs -> (x+i)::f (i*i) xs f 2 [1;2;3] val it : int list = [3; 6; 19]

在示例中,我使用了stream-to-promise库来保证转换。

对于每个流,创建一个承诺。流完成后解析promise,当流失败时拒绝。

const streamToPromise = require('stream-to-promise')

const promise1 = streamToPromise(readable1.pipe(writable1));
const promise2 = streamToPromise(readable2.pipe(writable2));

Promise.all([promise1, promise2]).
    .then(() => console.log('all the streams are finished'));