除了通常的嫌疑人(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