我即将打包到 Node,尝试将其用于某些文件解析功能,但我遇到了一些绝对令人困惑的行为。
我有一个解析器类,它应该打开一个文件,然后逐行解析它。当我向它传递一个不存在的文件路径时,它不会抛出错误,但也不会继续执行。我尝试对其进行调试,当我尝试继续到我在 catch 块内部设置的断点时,调试器就会分离。但我也知道
open
承诺没有得到实现,因为它至少应该继续到 parseLines
方法调用,它应该简单地将“解析行”打印到终端,但事实并非如此。
catch
块也没有运行,因为错误也没有记录到控制台。所以程序似乎就在这行代码处悄然死亡。
我必须遗漏一些非常基本的东西。
async parse(filePath: string) {
try {
this._file = await open(filePath, 'r');
}
catch (ex) {
console.log(ex);
}
this.parseLines();
}
private parseLines() {
console.log('Parsing lines');
const fs = require("fs").promises;
class Parser {
async parse(filePath) {
try {
console.log(`Trying to open file: ${filePath}`);
this._file = await fs.open(filePath, "r");
console.log(`File opened successfully: ${filePath}`);
this.parseLines();
} catch (ex) {
console.log("Error caught in catch block:", ex);
}
}
parseLines() {
console.log("Parsing lines");
}
}
(async () => {
const parser = new Parser();
await parser.parse("path/to/nonexistent/file.txt");
})();
尝试一下它应该会抛出错误