【发布时间】:2017-03-17 09:59:39
【问题描述】:
我在 Node 中有一个子例程,用于在正确的应用程序启动之前加载配置等。事实证明,如果找不到文件,则无法捕获异常并破坏应用程序。
相关代码:
const fs = require('fs');
class FileParser {
static configure(filename) {
let file;
try {
file = this.loadFileSync(filename);
} catch (err) {
console.log(`File ${filename} not found`);
}
// ...
}
static loadFileSync(filename) {
fs.accessSync(filename, fs.F_OK);
return fs.readFileSync(filename, 'utf8');
}
}
如果找不到文件,fs.accessSync() 将抛出异常。很好,因为它可以保护fs.readFileSync()。但我认为这个异常会通过调用函数向上传播并且可以在那里被捕获——因此configure() 中的try...catch。
我不想解决loadFileSync() 中的异常,因为它在其他地方使用并且调用loadFileSync() 的函数将以不同的方式处理异常。那么,一般来说,防止文件未在此处找到和冒泡异常的正确方法是什么?
【问题讨论】:
-
你可以尝试一下吗:将 try/catch 放入 loadFileSync,然后在 catch 中抛出同样的错误。这样,您将 try/catch 放在 accessSync 上,然后抛出的错误将被 configure 捕获。不确定它会起作用
-
是的,尝试...抓住 fs.accessSync() 会有所帮助。但我真的不知道它为什么起作用以及做它的一般方法是什么。如果您能详细说明,我将不胜感激。
-
好吧,我不能对“accessSync”方法的实现发表太多评论,我相信该实现会引发一些未处理的错误,实际上并不是同步,而是一个循环,因此你无法得到错误但在 try/catch 中封装相同的方法会强制捕获任何未处理的错误。
-
如果修复有效,请接受答案,以便对其他人有所帮助。 :)
标签: javascript node.js exception fs