Escrever retornos de chamada condicionais de maneira linear em JS

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!