considerare questo pezzo di torta ... ehm, il codice:Questa funzione può essere raccolta automaticamente?
'use strict'
function doWork() {
return new Promise(function (resolve, reject) {
// work work work...
// Done! But... where's the resolve() ???
})
}
doWork().then(function doMoreWork() {
// Some more work to do...
})
volta che la funzione nel costruttore di Promise finisce ...
- È l'oggetto
Promise
garbage-da collezione? - È
doMoreWork()
immondizia da collezione?
mia ipotesi è che doMoreWork()
non può essere GC-ed direttamente perché la promessa mantiene un riferimento ad esso, ma una volta che le finiture del corpo del promessa e restituisce il contesto di esecuzione per la portata superiore (?), I snoda pila (perché non ci sono più dichiarazioni da eseguire) e la Promessa diventa irraggiungibile, quindi essere spazzatura-raccoglibile.
Potete confermare che la mia comprensione di questo argomento è corretta?
Come posso osservare empiricamente questo comportamento? In altre parole, come posso monitorare quali oggetti sono in GC-ed e quando? Mi sviluppo puramente in Node.js, se questo fa alcuna differenza.
Vuoi dire che il tuo lavoro non chiama mai 'resolve()'? Sì, in quel caso tutti i tuoi oggetti sarebbero sospetti di gc immediatamente. – Bergi