小编Ree*_*erg的帖子

什么情况下不会到达finally块?

除了通常的嫌疑人(process.exit(),或进程终止/信号,或崩溃/硬件故障)之外,是否存在无法到达finally块中的代码的情况?

以下打字稿代码通常按预期执行(使用node.js),但有时会在第 4 行立即终止,并且不会引发任何异常,也不会更改进程退出代码(退出 0/成功):

1 import si from 'systeminformation';
2 async populateResolvedValue() {
3   try {
4     const osInfo = await si.osInfo();
5     ...
6   } finally {
7     console.log('whew!');  //  <=========== NOT REACHED!
8   }
9 }
Run Code Online (Sandbox Code Playgroud)

我已经在 IJ 调试会话中验证了这一点 -finally第 7 行的块有时不会执行,并且会在第 4 行立即终止(对堆栈进行一些展开)。我知道这种情况可能发生(并且仍然成功退出)的唯一情况是,如果在某处遇到段错误someAsyncFunc(),但我添加了“段错误处理程序”,但那里没有任何显示。

我也尝试过使用 Promise.then/finally 而不是 async/await 和 try/finally 语义 - 完全相同的行为。

Node.js:v12.18.2 和 v14.16.0

javascript node.js typescript

5
推荐指数
1
解决办法
4943
查看次数

标签 统计

javascript ×1

node.js ×1

typescript ×1