如何在nodejs中的pipe道stream错误事件后恢复?

在MyWritableStream中发出错误事件后,数据传输停止。 我需要做什么来恢复数据传输?

var readable = fs.createReadStream('test.txt'); var writable = new MyWritableStream(); writable.on('error', function(error) { console.log('error', error); // How i can resume? }); writable.on('finish', function(){ console.log('finished'); }) readable.pipe(writable); 

我不确定,如果这是一个正常的做法,但我现在看不到另一个解决scheme,它适用于我。 如果您可以build议更准确的解决scheme,请执行。

我们可以使用可写事件中的pipe事件来跟踪可读stream实例:

 function WriteableStream(options) { Writable.call(this, options); this.source = null; var instance = this; this.on('pipe', function(source){ instance.source = source; }); } util.inherits(WriteableStream, Writable); 

所以,当我们发出错误事件,并且可读stream自动被抽取时,我们可以自己重新pipe道:

 WriteableStream.prototype._write = function(chunk, encoding, done) { this.emit('error', new Error('test')); // unpipes readable done(); }; WriteableStream.prototype.resume = function() { this.source.pipe(this); // re-pipes readable } 

最后,我们将以如下方式使用它:

 var readable = fs.createReadStream(file); var writeable = new WriteableStream(); writeable.on('error', function(error) { console.log('error', error); writeable.resume(); }); readable.pipe(writeable);