Instead of attaching listeners to events, viz.:
foo = new Foo()
foo.on "loaded", ->
bar = new Bar()
bar.on "loaded", ->
loadBaz()
bar.load()
foo.load()
We pass a function into the method as a return callback:
loadFoo ->
loadBar ->
loadBaz
An additional benefit to this method is composability. If we define a partial
application combinator par
, where:
par = (f, x) -> (y) -> f x, y
We can then compose loadBar
and loadBaz
into one callback it to:
loadFoo (par loadBar, loadBaz)