我有多个包含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
事件?
感谢您的期待。
答案 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);
}