Control sequencial deferred events.
- Wait locking task (like user input) and resume.
- Pool action events after current one
- Handle them with jQuery.Deferred API
- jQuery or simply-deferred
$ npm install whirlr
$ bower install whirlr
whirlr = new Whirlr
# Add 1st queue
whirlr.add (d) ->
console.log 'queue 1'
d.resolve()
# Add 2nd queue
whirlr.add (d) ->
console.log 'queue 2'
d.resolve()
# stop runner execution
whirlr.stop()
whirlr.resume()
console.log 'loaded'
Result
loaded
start
queue 1
queue 2
queue 3
Add function to last for waiting queue.
whirlr = new Whirlr
whirlr.add (d) -> setTimeout (-> d.resolve()), 100
whirlr.add (d) -> setTimeout (-> d.resolve()), 100
whirlr.add (d) -> setTimeout (-> d.resolve()), 100
Use external deferred.
whirlr = new Whirlr
whirlr.add ->
Deferred().resolve()
Add as task class.
class MyTask extends Whirlr.Task
execute: (d)-> d.resolve()
whirlr = new Whirlr
whirlr.add new MyTask
Add event queue to head.
(I will rename it...)
whirlr = new Whirlr
whirlr.add (d) ->
setTimeout ->
console.log 'A'
d.resolve()
, 100
whirlr.unshift (d) ->
setTimeout ->
console.log 'B'
d.resolve()
, 100
# B -> A
Stop whirlr.
whirlr = new Whirlr
whirlr.add (d) ->
setTimeout ->
console.log 'A'
d.resolve()
, 100
whirlr.add (d) ->
setTimeout ->
console.log 'B'
d.resolve()
, 100
whirlr.stop()
whirlr.resume()
console.log whirlr.stopped() #=> true
console.log whirlr.resuming() #=> true
console.log 'C'
# C -> A -> B
# if you don't install mocha
$ npm install -g mocha
# run tests
$ mocha --compilers coffee:coffee-script --reporter spec
- Guys at Quipper