2016-09-17 90 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); 
}