Using IcedCoffeescript to mitigate callback headaches
IcedCoffeeScript is a fairly new superset of CoffeeScript that adds 2 new keywords: await
and defer
. Iced comes with a drop-in replacement interpreter iced
.
In 140 characters or less: IcedCoffeescript makes event based programming easier with a procedural-like syntax.
The await
block allows you to run multiple asynchronous calls in parallel, and precede when their defer
callback is fired.
Example
Here are some examples of await
and defer
in action.
Edit: I feel my previous example failed to show the big picture. Here's a much dirtier example of deferring with 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
CoffeeScript equivalent
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()
Source: nodewebdesign.com
Written by Sam Hunter
Related protips
1 Response
Nice one. After using IcedCoffeeScript for a few months, now I can't even imagine writing Node.js apps without it. I'd like to see more developers using it, as it elegantly mitigates one of the major drawbacks of Node.js.
I've recently published a similar pro tip showing a "real world" usage scenario.