Как я могу получить список обратных вызовов в рабочей очереди Node? (или, почему Node не выходит?)

84

На странице о Node.js говорится :

Узел выходит из цикла обработки событий, когда больше нет обратных вызовов для выполнения.

Есть ли способ узнать, какие обратные вызовы удерживают Node от выхода?

Дмитрий Миньковский
источник
2
это отличный вопрос ... тот же самый, который я начал задавать при изучении цикла событий ... как мне увидеть очередь? не уверен, почему люди проголосовали против этого. ;)
tbarbe 08

Ответы:

90

Вы можете использовать process._getActiveHandles()иprocess._getActiveRequests()

См. Это обсуждение в списке рассылки node.js.

обновление: для этого есть хороший пакет - https://github.com/mafintosh/why-is-node-running

Андрей Сидоров
источник
2
Большое вам спасибо, это то, что я искал. Ранее в # Node.js на Freenode кто - то пытался запомнить эти звонки и coun't совсем добраться: "totally spacing on the name, it's like "process._getOpenHandles()" or something equally hard to remember". Я искал в Google, пытаясь найти реальный звонок, и не смог. Еще раз спасибо.
Дмитрий Минковский
2
Я тоже не мог вспомнить имена - использовал node repl, набрал process._ + завершение табуляции :)
Андрей Сидоров
Ха, я не подумал об автозаполнении REPL, что, конечно, лучший способ сделать это. Я заглянул node_globals.jsи не нашел. Теперь я просматриваю кодовую базу узлов, зная, что искать, и обнаруживаю, что они определены в node.cc. process._getActiveHandles () - src/node.cc:2345: NODE_SET_METHOD(process, "_getActiveHandles", GetActiveHandles);Ха! Превосходно.
Дмитрий Минковский
@dimadima сейчас есть один отрицательный голос между вопросом и ответом. Итак, во-первых, это не «люди», это «человек». А StackOverflow - один из 100 самых посещаемых веб-сайтов в мире, не стоит так усердствовать, что кому-то где-то не очень понравился этот вопрос.
djechlin
2
есть ли официальная документация по этим функциям?
tbarbe 08
11

Существует модуль wtfnode npm, чтобы показать, что поддерживает работу приложения nodejs, когда вы отправляете ему SIGINT (ctrl-c).

Это внутреннее использование, process._getActiveHandles()как указано в ответе @andrey-sidrov. Преимущество использования wtfnodeзаключается в том, что он обеспечивает легко читаемый вывод.

алын
источник
Выдает ли process._getActiveHandles ().
Length