Acabo de comenzar a usar el nodo, y una cosa que noté rápidamente es la rapidez con que las devoluciones de llamada pueden acumularse hasta un nivel tonto de sangría:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
La guía de estilo oficial dice que poner cada devolución de llamada en una función separada, pero eso parece demasiado restrictivo en el uso de cierres, y hacer que un solo objeto declarado en el nivel superior esté disponible varias capas hacia abajo, ya que el objeto debe pasar por todos los devoluciones de llamada intermedias.
¿Está bien usar el alcance de la función para ayudar aquí? ¿Coloca todas las funciones de devolución de llamada que necesitan acceso a un objeto global-ish dentro de una función que declara ese objeto, por lo que se cierra?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
y así sucesivamente para varias capas más ...
¿O existen marcos, etc. para ayudar a reducir los niveles de sangría sin declarar una función con nombre para cada devolución de llamada? ¿Cómo manejas la pirámide de devolución de llamada?