Skip to content

Instantly share code, notes, and snippets.

@skrat
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skrat/fbd21fa75e9f05a9d0aa to your computer and use it in GitHub Desktop.
Save skrat/fbd21fa75e9f05a9d0aa to your computer and use it in GitHub Desktop.
Promise queue
i = 0
queue = []
rs_command = (cmd) -> -> new Promise (resolve, reject) ->
post(uri: RSWS_URI, json: cmd)
.then (result) ->
errors = get_errors(result[0].body)
if errors.length
return reject(errors)
resolve(result[0].body)
.catch (err) ->
reject(err)
consume = ->
next = ->
[promise, [resolve, reject]] = queue[0]
promise()
.then (result) ->
resolve(result)
.catch (err) ->
reject(err)
.then ->
queue.shift()
if queue.length then next()
next()
create: (method, params={}) ->
method : method
params : params
jsonrpc : "2.0"
id : i++
add = (method, params) ->
should_consume = not queue.length
resolver = new Promise (resolve, reject) ->
queue.push([rs_command(create(method, params)), [resolve, reject]])
if should_consume then consume()
resolver
### ----
add("one")
add("two").then (result) ->
console.log("Care about result? Here's #{result}")
setTimeout ->
add("three")
, 1000
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment