¿Cómo puedo obtener una lista de devoluciones de llamada en la cola de trabajo del nodo? (o, ¿Por qué Node no sale?)

84

Dice en la página acerca de Node.js :

El nodo sale del bucle de eventos cuando no hay más devoluciones de llamada para realizar.

¿Hay alguna forma de averiguar qué devoluciones de llamada impiden que Node salga?

Dmitry Minkovsky
fuente
2
esta es una gran pregunta ... la misma que comencé a hacer cuando estudiaba el bucle de eventos ... ¿cómo veo la cola? No estoy seguro de por qué la gente rechazaría esto. ;)
tbarbe

Respuestas:

90

Puedes usar process._getActiveHandles()yprocess._getActiveRequests()

Vea esta discusión en la lista de correo de node.js.

actualización: hay un buen paquete para esto: https://github.com/mafintosh/why-is-node-running

Andrey Sidorov
fuente
2
Muchas gracias, esto es lo que estaba buscando. A principios de # Node.js en freenode alguien estaba tratando de recordar estas llamadas y coun't bastante llegar: "totally spacing on the name, it's like "process._getOpenHandles()" or something equally hard to remember". Estaba buscando en Google tratando de encontrar la llamada real y no pude. Gracias de nuevo.
Dmitry Minkovsky
2
No pude recordar los nombres también: usé respuesta de nodo, proceso escrito ._ + finalización de tabulación :)
Andrey Sidorov
Ja, no había pensado en REPL autocompletar, que por supuesto es la mejor manera de hacerlo. Había mirado adentro node_globals.jsy no lo encontré. Ahora estoy haciendo grepping en la base de código del nodo, sabiendo qué buscar y descubro que están definidos en node.cc. process._getActiveHandles () es src/node.cc:2345: NODE_SET_METHOD(process, "_getActiveHandles", GetActiveHandles);¡Ja! Excelente.
Dmitry Minkovsky
@dimadima hay un voto negativo entre pregunta y respuesta en este momento. Entonces, en primer lugar, no es "gente", es "una persona". Y StackOverflow es uno de los 100 sitios web más visitados del mundo, realmente no debería tomárselo tan a pecho como para que a alguien, en algún lugar, no le guste mucho esta pregunta.
djechlin
2
¿Existe documentación oficial sobre estas funciones?
tbarbe
11

Hay un módulo npm wtfnode para mostrar qué mantiene la aplicación nodejs en ejecución cuando le envía SIGINT (ctrl-c).

Tiene usos internos process._getActiveHandles()como se menciona en la respuesta de @ andrey-sidrov. El beneficio de usar wtfnodees que proporciona una salida fácil de leer.

aleung
fuente
Hace process._getActiveHandles (). Length da un total de todos los procesos o solo para el proceso donde se llama
Shantanu Madane