我正在编写图像处理服务,我必须将图像转换为多种尺寸
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/pump
和https://github.com/maxogden/mississippi
这样的库,但这些库只显示写入多个转换的单个目标。
我如何能够检查所有流是否已完成写入或其中一个是否已出错?如何在数组中处理它们?
答案 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'));