Node.js: inspecteer wat er nog over is in de gebeurtenislus die verhindert dat het script op natuurlijke wijze wordt afgesloten

Het Node.js-script wordt niet afgesloten als er callbacks over zijn in de hoofdgebeurtenislus. Hoewel men het script met geweld zou kunnen beëindigen door process.exit()aan te roepen of door exceptions te genereren, is het aan te raden om het script “natuurlijk” te laten beëindigen door altijd de juiste opschoning uit te voeren. Dit kan echter soms moeilijk zijn, omdat bugs in de code een goede opschoning kunnen belemmeren, bijvoorbeeld, ik kan vergeten een IntervalObject te verwijderen wanneer het niet langer nodig is, enz., waardoor het programma uiteindelijk niet kan worden beëindigd.

Is er daarom een ​​manier om een ​​niet-beëindigend script te debuggen om erachter te komen wat er nog in de gebeurtenislus is geregistreerd? Met andere woorden, is er een manier in Node.js om te debuggen waardoor het programma niet kan worden afgesloten?


Antwoord 1, autoriteit 100%

Je kunt process._getActiveRequests()aanroepen om een ​​lijst met actieve I/O-verzoeken te krijgen en process._getActiveHandles()om een ​​lijst met open handvatten/bestand te krijgen beschrijvingen.


Antwoord 2, autoriteit 33%

Het wtfnodepakket maakt gebruik van de tools genoemd door @mscdex maar presenteert op een meer ontwikkelaarsvriendelijke manier. Ik raad dit ten zeerste aan om deze ergernissen op te sporen.

const wtf = require('wtfnode');
// ...
wtf.dump();

Antwoord 3, autoriteit 3%

Node.js, vanaf versie 8, biedt een handige module om dit soort informatie op te halen.

async_hooks: een API om callbacks te registreren het volgen van de levensduur van asynchrone bronnen die zijn gemaakt in een Node.js-toepassing.

Other episodes