Open 029A-h opened 2 weeks ago
According to the Nodejs documentation related to exit codes:
13 Unsettled Top-Level Await: await was used outside of a function in the top-level code, but the passed Promise never settled.
In the example below I expect to get 13
as an exit code in beforeExit
and exit
events but it doesn't.
import { createInterface } from "node:readline/promises";
process.on("exit", (code) => {
console.log("\nexit:", code);
});
process.on("beforeExit", (code) => {
console.log("\nbeforeExit:", code);
});
process.on("warning", (w) => {
console.log("\nwar :", w);
});
const rl = createInterface({ input: process.stdin, output: process.stdout });
await rl.question("Enter something:");
Result :
Enter something:
beforeExit: 0
exit: 0
Warning: Detected unsettled top-level await at file:///home/imanhpr/Desktop/sandbox/node-box/sig.js:16
const data = await rl.question("Enter something:");
It's good to mention when I check the previous process exit code with echo $?
it's 13
and it's fine.
I could try to work on this. Can someone assign me?
Hi! If you have a solution, feel free to submit a PR!
Version
v22.2.0
Platform
Linux LX-LAPII 6.9.3-arch1-1 #1 SMP PREEMPT_DYNAMIC Fri, 31 May 2024 15:14:45 +0000 x86_64 GNU/Linux
Subsystem
node:readline/promises
What steps will reproduce the bug?
It is not possible to properly handle a user's abortion of a promise readline question with SIGINT or Ctrl+D while rl.question waits for user input:
How often does it reproduce? Is there a required condition?
Every time when a prompt is aborted with Ctrl+C or Ctrl+D.
What is the expected behavior? Why is that the expected behavior?
The expected behavior is to settle a promise on a readline close event, as shown in the following snippet:
What do you see instead?
The promise remains unsettled, resulting in a warning that cannot be caught:
Additional information
This issue is opened based on the discussion in [stackoverflow] How to properly abort Node readline promise question?