Ho appena iniziato a utilizzare il nodo e una cosa che ho notato rapidamente è la velocità con cui i callback possono raggiungere un livello di rientro stupido:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
La guida di stile ufficiale dice di mettere ogni callback in una funzione separata, ma ciò sembra eccessivamente restrittivo sull'uso delle chiusure, e rendere un singolo oggetto dichiarato nel livello superiore disponibile diversi livelli verso il basso, poiché l'oggetto deve essere passato attraverso tutti i richiamate intermedie.
Va bene usare l'ambito delle funzioni per aiutare qui? Metti tutte le funzioni di callback che hanno bisogno di accedere a un oggetto global-ish all'interno di una funzione che dichiara quell'oggetto, quindi va in chiusura?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
e così via per molti altri livelli ...
Oppure ci sono framework ecc per aiutare a ridurre i livelli di rientro senza dichiarare una funzione con nome per ogni singolo callback? Come gestisci la piramide del callback?