写入流发出错误后恢复流程?

我使用nodejs流作为数据处理的管道。 我遇到的问题是,只要我的writeStream目标发出错误,管道就会停止将数据流向writeStream。 事实上,它看起来像pipe一样实施。 一旦发生单个错误,writeStream就会从管道中分离出来。 https://github.com/joyent/node/blob/master/lib/stream.js#L89-112

这似乎有点侵略性,但我想要的。 我希望能够记下错误,但要保持管道畅通。 我怎样才能做到这一点?

我的流如下所示:

client.readStream()
        .pipe(process1)
        .pipe(process2)
        .pipe(process3)
        .pipe(mongo.writeStream())
        .on('data', console.log)
        .on('error', console.log);

process1process2process3 ,被实现为.MAP()从事件流库。

mongo写入流看起来像这样。

function MongoStream(_mongo) {
  Stream.Writable.call(this, { objectMode : true });
}

util.inherits(MongoStream, Stream.Writable);

MongoStream.prototype._write = function (model, encoding, callback) {
  var self = this;
  console.log("Saving model");
  model.save(function(err, result) {
    if(err){ 
        self.emit('error', err);
    } else {
        console.log("model saved");
        self.emit('data', result);
    }
    callback();
  });
};

读取流只是来自猫鼬模型的.find().stream()


为事件使用error以外的名称:

self.emit('error', err);

可以说:

self.emit('err', err);

那不会触发.pipe安装的侦听.pipe

然后使用: .on('err', console.log)

这可能比尝试更改.pipe更好,因此它对error没有任何作用。

链接地址: http://www.djcxy.com/p/87247.html

上一篇: Resume flow after write stream emits an error?

下一篇: Error: connect ECONNREFUSED issue in nodejs