为什么 Node 会以退出代码 13 退出,而不是挂起?

joh*_*ncs 10 node.js async-await

deadlock.mjs一个包含以下内容的文件:

await new Promise(function(resolve) {});
Run Code Online (Sandbox Code Playgroud)

将运行并立即结束,给出退出代码 13。我本来希望这个程序永远挂起。

await new Promise(function(resolve) {resolve()});
Run Code Online (Sandbox Code Playgroud)

毫不奇怪,立即结束并给出 0 退出代码。

为什么第一个程序没有死锁?退出代码 13 有何意义?

joh*_*ncs 9

Node 没有死锁,因为它注意到它没有等待任何东西。这是关于它如何注意到这一点的很好的解释。但是因为您在这里使用了顶级等待,所以 Node 知道它正在异常退出并给出 13 退出代码:

13 Unfinished Top-Level Awaitawait在顶级代码的函数外部使用,但传递的Promise从未解析。

https://nodejs.org/api/process.html#exit-codes