nexter
v1.0.8
Published
Flattens an asynchronous call stack into a linear queue using a fluent interface.
Downloads
1
Maintainers
Readme
nexter
Flattens an asynchronous call stack into a linear queue using a fluent interface.
USAGE
var count = 0;
var nexter = require('nexter');
nexter()
.each(req.files, function (file, state, next) {
state.file = file;
// Call functions that use simple next(err) style callbacks.
process(file, next);
})
// Whenever next is called in the loop above, this function is called
// with a unique state object.
.then(function (state, next) {
if (path.extname(state.file.originalname).toLowerCase() == '.zip') {
unzip(file, next);
} else {
next();
}
})
// Create predicate based functions using when
.when(function () { return (++count >= req.files.length) }, function (state, next) {
notifyCr(dir, req.body.path, next);
})
.then(function (state, next) {
res.status(204).end();
})
.error(next) // Provide the error method for the given request.
.go(); // Call go to set everything in motion.
IF ORDER IS INPORTANT
seq
begins a sequence of calls. The sequence is completed for each item in the given array in turn and in order. The item can be past down the sequence in the state
variable if necessary. This is the same as if nesting one nexter queue inside another.
nexter()
.seq(req.files, function (file, state, next) {
// This and the then's that follow it are called
// sequentially for each file in req.files.
next();
})
.then(function (state, next) {
// All of these then's are called once for each
// file in order and not parallel as with each().
next();
})
.then(function (state, next) {
// The next file has not started, and will not
// until endSeq() is reached.
next();
})
.endSeq() // This ends the sequence and jumps back
// to the seq() call to handle the next file.
// Create predicate based functions using when
.then(function (state, next) {
// This is called after the sequence ends.
})
.then(function (state, next) {
res.status(204).end();
})