Skip to content

Instantly share code, notes, and snippets.

@andreypopp
Created October 19, 2012 14:52
Show Gist options
  • Save andreypopp/3918626 to your computer and use it in GitHub Desktop.
Save andreypopp/3918626 to your computer and use it in GitHub Desktop.
define (require, exports) ->
$ = require 'jquery'
exports.queued = (func) ->
q = $({})
wrapper = ->
args = arguments
q.queue (next) =>
func.apply(this, args).then(next, next)
exports.wrap = (func) ->
wrapped = ->
deferred = $.Deferred()
deferred.resolve(func.apply(this, arguments))
deferred
exports.seq = (actions) ->
actions = if $.isArray(actions) then actions else $.makeArray(arguments)
q = $({})
result = $.Deferred()
for p in actions when p != undefined
do (p) =>
q.queue (next) ->
deferred = p()
if deferred != undefined
deferred.then(next, result.reject)
else
next()
q.queue result.resolve
result
exports.par = (actions) ->
actions = if $.isArray(actions) then actions else $.makeArray(arguments)
deferreds = for p in actions when p != undefined
do (p) => p()
$.when.apply(this, deferreds)
exports.cont = (func) ->
->
deferred = $.Deferred()
args = $.makeArray(arguments)
args.splice 0, 0, (result, error) ->
if error != undefined
deferred.reject(error)
else
deferred.resolve(result)
func.apply(this, args)
deferred
exports
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment