Trabalhar em Node.JS torna muito fácil chegar ao “inferno de callback” e, embora haja várias maneiras de contornar isso, as soluções geralmente não funcionam em seções pequenas / contidas de código.
O principal problema que enfrento é quando tenho uma condição que altera a forma como a próxima parte do programa é executada, talvez adicionando um retorno de chamada, algo como:
callback = (err, data) ->
the rest of my program
if some_clause is true
mongo.find conditions, callback
else
callback null, []
Nesse caso, o retorno de chamada precisa ser definido antes (acima) de ser chamado, então a ordem do método não é mais linear – em vez disso, ele atinge a linha 100 antes de voltar para as linhas 50 a 99. Isso torna o entendimento do código muito mais difícil para mim.
Ultimamente, no entanto, adotei a seguinte abordagem:
if some_clause is true
fn = (callback) -> mongo.find conditions, callback
else
fn = (callback) -> callback null, []
fn (err, data) ->
the rest of my program
Desta forma, o programa é executado em ordem e a compreensão do código é muito melhorada (ou pelo menos, tanto quanto pode com callbacks)
Se você conhece uma melhoria nesta técnica, me avise!