| var time = require("measure-time"); | ||
| var serially = require("./"); | ||
| time('basic', function (end) { | ||
| serially() | ||
| .then(quux) | ||
| .then(corge) | ||
| .then(span) | ||
| .done(end); | ||
| }); | ||
| time('with parameters and aliases', function (end) { | ||
| serially() | ||
| .then(foo, ['hello', 'world', '!']) | ||
| .then('bar-alias', bar, [1, 2, 3]) | ||
| .then(qux, [4, 5, 6]) | ||
| .done(end); | ||
| }); | ||
| function foo (pa, ra, ms, callback) { | ||
| setImmediate(function () { | ||
| callback(undefined, pa + '\n' + ra + '\n' + ms); | ||
| }); | ||
| } | ||
| function bar (pa, ra, ms, callback) { | ||
| setImmediate(function () { | ||
| callback(undefined, pa + ra + ms); | ||
| }); | ||
| } | ||
| function qux (pa, ra, ms, callback) { | ||
| setImmediate(function () { | ||
| callback(undefined, pa * ra * ms); | ||
| }); | ||
| } | ||
| function quux (callback) { | ||
| setImmediate(function () { | ||
| callback(); | ||
| }); | ||
| } | ||
| function corge (callback) { | ||
| setImmediate(function () { | ||
| callback(); | ||
| }); | ||
| } | ||
| function span (callback) { | ||
| setImmediate(function () { | ||
| callback(); | ||
| }); | ||
| } |
+37
-27
@@ -5,32 +5,14 @@ var loop = require("serial-loop"); | ||
| function serially (fn, params) { | ||
| function serially () { | ||
| var fns = []; | ||
| call.add = add; | ||
| call.then = add; | ||
| call.done = call; | ||
| var self = { | ||
| then: then, | ||
| done: call, | ||
| end: call | ||
| }; | ||
| return call; | ||
| return self; | ||
| function call (callback) { | ||
| var results = []; | ||
| loop(fns.length, each, function (error) { | ||
| callback(error, results); | ||
| }); | ||
| function each (done, i) { | ||
| var params = fns[i].params ? fns[i].params.slice() : []; | ||
| params.push(function callback (error) { | ||
| if (error) return done(error); | ||
| results[fns[i].alias] = Array.prototype.slice.call(arguments, 1); | ||
| done(); | ||
| }); | ||
| fns[i].fn.apply(undefined, params); | ||
| } | ||
| } | ||
| function add (alias, fn, params) { | ||
| function then (alias, fn, params) { | ||
| if (typeof alias != 'string') { | ||
@@ -48,4 +30,32 @@ params = fn; | ||
| return call; | ||
| return self; | ||
| } | ||
| function call (callback) { | ||
| var results = {}; | ||
| var len = fns.length; | ||
| (function next (i, error) { | ||
| if (error) return callback(error, results); | ||
| if (i >= len) return callback(undefined, results); | ||
| var params = fns[i].params; | ||
| if (!params) { | ||
| params = []; | ||
| } else { | ||
| params = params.slice(); | ||
| } | ||
| params.push(function (error) { | ||
| if (error) return next(i + 1, error); | ||
| results[fns[i].alias] = Array.prototype.slice.call(arguments, 1); | ||
| next(i+1); | ||
| }); | ||
| fns[i].fn.apply(undefined, params); | ||
| }(0)); | ||
| } | ||
| } |
+3
-2
| { | ||
| "name": "serially", | ||
| "version": "0.1.0", | ||
| "version": "1.0.0", | ||
| "description": "Compose async functions into one function that runs all serially", | ||
@@ -10,3 +10,4 @@ "main": "index.js", | ||
| "devDependencies": { | ||
| "prova": "*" | ||
| "prova": "*", | ||
| "measure-time": "0.0.1" | ||
| }, | ||
@@ -13,0 +14,0 @@ "keywords": [ |
+13
-12
@@ -5,2 +5,4 @@ ## serially | ||
| See also: [parallelly](http://github.com/azer/parallelly) | ||
| ## Install | ||
@@ -19,15 +21,14 @@ | ||
| var all = serially() | ||
| .add(foo, ['a', 'b', 'c']) | ||
| .add(bar, [1, 2, 3]) | ||
| .add('qux alias', qux, [4, 5, 6]) | ||
| serially() | ||
| .then(foo, ['a', 'b', 'c']) | ||
| .then(bar, [1, 2, 3]) | ||
| .then('qux alias', qux, [4, 5, 6]) | ||
| .done(function (error, results) { | ||
| if (error) throw error | ||
| console.log('done') | ||
| console.log(results) | ||
| // => { foo: [...], bar: [...], qux alias: [...] } | ||
| }) | ||
| all(function (error, results) { | ||
| if (error) throw error | ||
| console.log('done') | ||
| console.log(results) | ||
| // => { foo: [...], bar: [...], qux alias: [...] } | ||
| }) | ||
| function foo (pa, ra, ms, callback) {} | ||
@@ -34,0 +35,0 @@ function bar (pa, ra, ms, callback) {} |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
3440
55.16%5
25%89
147.22%1
-50%38
2.7%2
100%