为什么 fsPromises.open 不抛出错误也不继续执行?

问题描述 投票:0回答:1

我即将打包到 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');
javascript node.js typescript
1个回答
-1
投票

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");
})();

尝试一下它应该会抛出错误

© www.soinside.com 2019 - 2024. All rights reserved.