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.