Pipe node.js streams safely with Promises
Safely pipe node.js streams while capturing all errors to a single promise.
promisePipe(<readable stream>, [transform streams...], <writeable stream>)
It returns a promise. On success the resolved value will be an array of the streams passed in. When rejected an error object is created with following keys:
source: The stream that caused the error
originalError: Original error from the stream
message: The error message from original error
var promisePipe = require"promisepipe";promisePipefscreateReadStreamINPUT_FILEfscreateReadStreamOUTPUT_FILEthenconsole.log"Yay, all streams are now closed/ended/finished!";console.log"This stream failed:" errsource;console.log"Original error was:" erroriginalError;;
npm instal promisepipe
Stream piping in node.js is cool, but error handling is not because streams do not bubble to the target streams.
For example if the previous example is written like this:
It might crash your program at any time. You must handle the errors from each stream manually like this:
fscreateReadStreamINPUT_FILEon"error"// handle the errorpipeon"error"// handle the errorpipefscreateReadStreamOUTPUT_FILEon"error"// handle the error
Which is imo repeative and cumbersome (at least when you want to use promises).