我在 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()
的函数将以不同方式处理异常。那么,什么是防止文件未找到和冒泡异常的正确方法?
最佳答案
试试这个:
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) {
try {
fs.accessSync(filename, fs.F_OK);
} catch(error) {
throw(error);
}
return fs.readFileSync(filename, 'utf8');
}
}
这可能会解决问题,您遇到此问题的原因可能是因为 accessSync 方法本身的实现。
关于javascript - Javascript 中的 try...catch 中出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42854417/