Ho appena iniziato a utilizzare il nodo e una cosa che ho notato rapidamente è la velocità con cui i callback possono accumularsi fino a un livello di indentazione 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 ciascuna richiamata in una funzione separata, ma che sembra eccessivamente restrittiva sull'uso delle chiusure, e rendendo un singolo oggetto dichiarato nel livello superiore disponibile diversi livelli in basso, poiché l'oggetto deve essere passato attraverso tutti i callback intermedi.
Va bene usare l'ambito delle funzioni per aiutare qui? Metti tutte le funzioni di callback che necessitano dell'accesso a un oggetto ish globale all'interno di una funzione che dichiara tale oggetto, quindi entra in una 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 ...
O ci sono framework etc per aiutare a ridurre i livelli di indentazione senza dichiarare una funzione con nome per ogni singolo callback? Come gestisci la piramide callback?