Acabei de começar a usar o nó, e uma coisa que notei rapidamente é a rapidez com que os retornos de chamada podem criar um nível bobo de recuo:
doStuff(arg1, arg2, function(err, result) {
doMoreStuff(arg3, arg4, function(err, result) {
doEvenMoreStuff(arg5, arg6, function(err, result) {
omgHowDidIGetHere();
});
});
});
O guia de estilo oficial diz para colocar cada retorno de chamada em uma função separada, mas isso parece excessivamente restritivo ao uso de fechamentos e tornar um único objeto declarado no nível superior disponível várias camadas abaixo, pois o objeto deve ser passado por todas as retornos de chamada intermediários.
É bom usar o escopo da função para ajudar aqui? Coloque todas as funções de retorno de chamada que precisam acessar um objeto global-ish dentro de uma função que declare esse objeto, para que ele seja encerrado?
function topLevelFunction(globalishObject, callback) {
function doMoreStuffImpl(err, result) {
doMoreStuff(arg5, arg6, function(err, result) {
callback(null, globalishObject);
});
}
doStuff(arg1, arg2, doMoreStuffImpl);
}
e assim por diante por várias outras camadas ...
Ou existem estruturas etc para ajudar a reduzir os níveis de recuo sem declarar uma função nomeada para cada retorno de chamada? Como você lida com a pirâmide de retorno de chamada?