try catch块中有多个fs.createReadStream

时间:2016-09-17 07:13:43

标签: javascript node.js

我有多个包含fs.createReadStream()的语句。我知道我们可以通过监听on('error',cb)事件来处理错误,但如果我开始在每个流上收听error事件,代码就会变得混乱。我希望它干净利落:

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

但它不能像这样工作。反正我是否可以使用上面的代码结构来处理错误,而不是在每个流上监听error事件?

感谢您的期待。

2 个答案:

答案 0 :(得分: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 :(得分:1)

简而言之,您无法使用try/catch来捕获异步error事件。阅读有关Node.js Errors的详细信息。

在这种情况下,error 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);
}