2016-09-17 94 views
0

我有多個包含fs.createReadStream()的語句。我知道我們可以通過收聽on('error',cb)事件來處理錯誤,但是如果我開始在每個流上收聽error事件,代碼將會變得混亂。我想它是乾淨的:在try catch塊中多個fs.createReadStream

try{ 
    var file1 = fs.createReadStream(path1), 
     file2 = fs.createReadStream(path2), 
     file3 = fs.createReadSTream(path3), 
     .... 
} 
catch(e){ 
    console.log(e); 
} 

但它不這樣工作。無論如何,我可以使用上述類似代碼結構來處理錯誤,而不是在每個流上收聽error事件?

感謝您的期待。

+1

爲什麼不用包含'fs.createReadStream()'的函數來接收一個路徑並附加一個'error'處理程序?這應該產生相當乾淨的代碼。 – robertklep

回答

2

簡短的回答是

假設你可以鞏固錯誤處理邏輯(你將在一個try-catch情況下是這樣),那麼只需創建一個函數,並用它作爲error處理每個數據流:

var file1 = fs.createReadStream(path1).on('error', onError), 
    file2 = fs.createReadStream(path2).on('error', onError), 
    file3 = fs.createReadSTream(path3).on('error', onError); 

function onError(err) { 
    // `this` === stream that encountered the error 
    console.log(err); 
} 
1

在總之,您不能使用try/catch來捕獲異步error事件。詳細瞭解Node.js Errors

在這種情況下,事件fs.createReadStream將在try/catch代碼執行後發生。

考慮使用同步方法,如fs.readFileSync,如果您真的想要try/catch

try{ 
    var file1 = fs.readFileSync(path1), 
     file2 = fs.readFileSync(path2), 
     file3 = fs.readFileSync(path3), 
     .... 
} 
catch(e){ 
    console.log(e); 
}