如何找出阻碍 Node.js 退出的原因?

Tom*_*ica 4 javascript debugging event-loop node.js

我在编写各种 Node.js 脚本时经常遇到这个问题。一切完成后,他们并没有退出。通常,它是一个未封闭的套接字或 readline 接口。

当脚本变得更大时,这真的很难发现。有没有某种工具可以告诉我 NodeJS 还在等什么?我正在寻求一个通用的解决方案,该解决方案将有助于调试 NodeJS 在应该退出时未退出的所有情况。

样品:

图表 I. - 即使在侦听器被删除后,进程标准输入也会阻塞节点

const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
if (typeof process.stdin.setRawMode == "function")
    process.stdin.setRawMode(true);


const keypressListener = (stream, key) => {
    console.log(key);
    process.stdin.removeListener("keypress", keypressListener);
}
process.stdout.write("Press any key...");
process.stdin.on("keypress", keypressListener);
Run Code Online (Sandbox Code Playgroud)

图表二。-readline如果您忘记关闭界面,则会阻塞 Node

const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
Run Code Online (Sandbox Code Playgroud)

图表三。- 忘记setInterval也会阻塞节点,祝你好运找到它

setInterval(() => { }, 2000);
Run Code Online (Sandbox Code Playgroud)

Eve*_*ert 5

“why-is-node-running”会起作用吗?似乎完全符合您的需要。