dominictarr / through

simple way to create a ReadableWritable stream that works
Other
670 stars 64 forks source link

Best way to handle an error #39

Open eddieajau opened 9 years ago

eddieajau commented 9 years ago

Just wondering what's the best way to handle an error in a paused stream that is waiting for a promise to resolve. The example I have is something like the following case:

// Going to map some rows from a CSV reader
function mapRow() {
  return function (data) {
    // Yes, we want `this` in the context of the calling `through` function.
    var self = this;

    // Pausing the stream while we handle the promise.
    self.pause();

    somePromisaryService(data)
      .then(function () {
        self.emit(data);
        self.resume();
      })
      .catch(function (err) {
        // Ok, how do we deal with this???
      });
  }
}

aCsvReader()
  .pipe(through(mapRow()));

Is there anything available in the context of through that I can use or do I need to introduce something external to catch any error in the promise?

Thanks in advance.

dominictarr commented 9 years ago

Use self.emit('error', err) You other self.emit(data) should be self.queue(data) BTW. On Oct 5, 2015 12:47 PM, "Andrew Eddie" notifications@github.com wrote:

Just wondering what's the best way to handle an error in a paused stream that is waiting for a promise to resolve. The example I have is something like the following case:

// Going to map some rows from a CSV readerfunction mapRow() { return function (data) { // Yes, we want this in the context of the calling through function. var self = this;

// Pausing the stream while we handle the promise.
self.pause();

somePromisaryService(data)
  .then(function () {
    self.emit(data);
    self.resume();
  })
  .catch(function (err) {
    // Ok, how do we deal with this???
  });

} }

aCsvReader() .pipe(through(mapRow()));

Is there anything available in the context of through that I can use or do I need to introduce something external to catch any error in the promise?

Thanks in advance.

— Reply to this email directly or view it on GitHub https://github.com/dominictarr/through/issues/39.