On Sun, Oct 7, 2012 at 5:54 PM, Alexey Petrushin <[email protected]> wrote: > Tried to copy files using streams and pipe and got funny results. Let's > consider following code (highlighted version https://gist.github.com/3850106 > ): > > var copy = function(from, to, cb){ > var fromStream = fs.createReadStream(from) > fromStream.on('error', cb) > var toStream = fs.createWriteStream(to) > toStream.on('error', cb) > fromStream.on('end', cb) > } > > copy('non existing file a', 'non existing dir/file b', function(err){ > console.log(err) > }) > > There are errors in both streams (non existing source file and no parent > directory for destination file) - so, both of them will emit > 'error' event, and the callback will be called twice with both errors. > > // Error will be reported twice: > // > // { [Error: ENOENT, open 'non existing file a'] errno: 34, > // code: 'ENOENT', path: 'non existing file a' } > // { [Error: ENOENT, open 'non existing dir/file b'] errno: 34, > // code: 'ENOENT', path: 'non existing dir/file b' } > > I found the solution by looking at the source of `util.pump` - it does it by > wrapping callback into function that calls callback only once - for the fist > error and ignoring others. > > But maybe it would be nice to have a callback for `createXxxStream` or > something like 'ready' or 'success' events to know that it created > successfully?
I'm missing how this would help. If there was such an event, either stream could still emit an error before it (e.g. open error) or after it (e.g. read or write error), so you'll still need to attach the two error handlers, and you'll still need to handle the possibility of multiple notifications. What would be the benefit of having another event to listen for? -- Martin Cooper > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en
