2015-10-28 50 views
2

在MyWritableStream中發出錯誤事件後,數據傳輸停止。我需要做什麼來恢復數據傳輸?如何在nodejs中的管道流中發生錯誤事件後恢復?

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); 

回答

1

我不知道,如果是正常的做法,但我看不到現在&它爲我另一種解決方案。如果您可以建議更準確的解決方案,請執行此操作。

我們可以寫一個跟蹤使用pipe事件可讀流實例:

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); 

所以,當我們發出錯誤事件,並讀取數據流自動爲unpiped,我們可以重新管它我們自己:

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); 
相關問題