Node.js: проверить, что осталось в цикле событий, что препятствует естественному завершению работы скрипта

Сценарий Node.js не завершится, если в главном цикле событий остались обратные вызовы. В то время как можно принудительно завершить сценарий, вызвав process.exit() или, выбрасывая исключения, рекомендуется позволить сценарию завершаться "естественным образом", всегда делая правильную очистку. Однако это иногда может быть затруднено, так как ошибки в коде могут помешать правильной очистке, например, я могу забыть удалить IntervalObject, когда он больше не нужен, и т. Д., Что в конечном итоге препятствует завершению программы.

Следовательно, есть ли способ отладки сценария без завершения, чтобы выяснить, что остается зарегистрированным в цикле событий? Другими словами, есть ли в Node.js способ отладки, что мешает программе завершиться?

2 ответа

Решение

Ты можешь позвонить process._getActiveRequests() получить список активных запросов ввода-вывода и process._getActiveHandles() чтобы получить список открытых дескрипторов / файловых дескрипторов.

wtfnode Пакет использует инструменты, упомянутые @mscdex, но представлен более удобным для разработчиков способом. Я настоятельно рекомендую это для отслеживания этих неприятностей.

const wtf = require('wtfnode');

// ...

wtf.dump();

Node.js, начиная с версии 8, предоставляет удобный модуль для получения такого рода информации.

async_hooks: API для регистрации обратных вызовов, отслеживающих время жизни асинхронных ресурсов, созданных в приложении Node.js.

Другие вопросы по тегам