I generatori sono funzioni che possono essere uscite e successivamente rientrate. Il loro contesto (legami variabili) sarà salvato attraverso i rientri.

I generatori in JavaScript — specialmente quando combinati con le Promesse — sono uno strumento molto potente per la programmazione asincrona in quanto mitigano — se non eliminano del tutto — i problemi con le callback, come Callback Hell e Inversion of Control. Tuttavia, una soluzione ancora più semplice a questi problemi può essere ottenuta con le funzioni asincrone.

Chiamando una funzione generatrice non si esegue immediatamente il suo corpo; viene invece restituito un oggetto iteratore per la funzione. Quando il metodo next() dell’iteratore viene chiamato, il corpo della funzione generatrice viene eseguito fino alla prima espressione yield, che specifica il valore da restituire dall’iteratore o, con yield*, delega a un’altra funzione generatrice. Il metodo next() restituisce un oggetto con una proprietà value che contiene il valore reso e una proprietà done che indica se il generatore ha reso il suo ultimo valore, come booleano. Chiamando il metodo next() con un argomento si riprende l’esecuzione della funzione del generatore, sostituendo l’espressione yield dove l’esecuzione era stata messa in pausa con l’argomento di next().

Un’istruzione return in un generatore, quando eseguita, farà finire il generatore (cioè la proprietà done dell’oggetto restituito da essa sarà impostata a true). Se viene restituito un valore, esso sarà impostato come proprietà value dell’oggetto restituito dal generatore.
Proprio come un’istruzione return, un errore lanciato all’interno del generatore farà finire il generatore — a meno che non venga catturato all’interno del corpo del generatore.
Quando un generatore è finito, le successive chiamate next() non eseguiranno alcun codice di quel generatore, restituiranno solo un oggetto di questa forma: {value: undefined, done: true}.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.