2017-12-15 29 views
0

나는 이미지 조작의 서비스를 쓰고 있어요 나는 여러 크기Nodejs에서 다중 스트림을 처리하는 방법은 무엇입니까?

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 같은 라이브러리를 보았다하지만이 라이브러리는 여러 트란 단일 목적지로 쓰기를 보여 sforms.

모든 스트림 작성이 완료되었거나 그 중 하나가 오류가 발생했는지 어떻게 확인할 수 있습니까? 어레이에서 어떻게 처리 할 수 ​​있습니까?

+1

약속해야합니다. 도움이 될 수 있습니다. https://www.npmjs.com/package/pipe-streams-to-promise – marekful

답변

0

약속 변환을 위해 스트림을 변환하고 Promise.all을 사용할 수 있습니다.

예에서 변환을 약속하기 위해 스트림에 stream-to-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'));