JavaScript async flow control
Execute after expected number of seq.done() are executed.
var Sequent = require('sequent');
var seq = new Sequent;
setTimeout(function(){
seq.done("done 1"); // Arguments are optional
}, 500);
setTimeout(function(){
seq.done("done 2", "end");
}, 1000);
// Wait for two seq.done()
seq.wait(2, function(arg1, arg2){
// arg1 == "done 2", arg2 == "end"
console.log("all done");
});
Exit waiting earlier than planned.
var Sequent = require('sequent');
var seq = new Sequent;
seq.wait(100, function(arg){
// arg == "matured"
});
for (var i=0; i<100; i++) {
if (i == 5) {
// Break here and go to callback of wait()
seq.mature("matured");
}
// seq.done() after seq.mature() are ignored
seq.done("done " + i);
}
Execute functions in queued order when it becomes available.
var Sequent = require('sequent');
var seq = new Sequent;
var funcs = [];
var results = [];
for (var i=1; i<=10; i++) {
// Functions will be executed in seq.queue()'d order.
// seq.queue() returns a wrapped function.
funcs.push(seq.queue(
(function(_i){
return function(){
results.push(_i);
}
})(i)
));
}
funcs.reverse();
// Mark queued functions as available
for (var i=0, l=funcs.length; i<l; i++) {
funcs[i]();
}
// Wait for all queued functions to be executed
seq.flush(function(){
// results is [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
});
npm install sequent