Usando IcedCoffeescript para mitigar dores de cabeça de retorno de chamada

IcedCoffeeScript é um superconjunto relativamente novo de CoffeeScript que adiciona 2 novas palavras-chave: awaite defer. O Iced vem com um intérprete substituto imediato iced.

Em 140 caracteres ou menos: IcedCoffeescript torna a programação baseada em eventos mais fácil com uma sintaxe semelhante a procedural.

O awaitbloco permite que você execute várias chamadas assíncronas em paralelo e anteceda quando seu deferretorno de chamada for disparado.

Exemplo

Aqui estão alguns exemplos de awaite deferem ação.

Edit: Eu sinto que meu exemplo anterior não conseguiu mostrar o quadro geral. Aqui está um exemplo muito mais sujo de adiamento com IcedCoffeeScript

IcedCoffeeScript

search = (keyword, cb) ->
host
= "http://search.twitter.com/"
url
= "#{host}/search.json?q=#{keyword}&callback=?"
await
$
.getJSON url, defer json
logSearch keyword
, defer success
cb json
.results

Equivalente de CoffeeScript

search = (keyword, cb) ->
host
= "http://search.twitter.com/"
url
= "#{host}/search.json?q=#{keyword}&callback=?"

deferred
= 0
json
= null
success
= null

next = ->
cb json
.results
defer
= (next) ->
next() if ++deferred is 2

$
.getJSON url, (_json) ->
json
= _json
defer
()
logSearch url
, (_success) ->
success
= _success
defer
()

Fonte: nodewebdesign.com