From c500e7a4c67725a66c1c12da5ad847dfb42e2f30 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Tue, 21 Jul 2015 04:32:24 -0400 Subject: [PATCH] feature(util) exec: each, eachSeries --- lib/util.js | 61 ++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 12 deletions(-) diff --git a/lib/util.js b/lib/util.js index 430e556b..c7698b4e 100644 --- a/lib/util.js +++ b/lib/util.js @@ -395,19 +395,56 @@ * load functions thrue callbacks one-by-one * @param funcs {Array} - array of functions */ - exec.series = function(funcs) { - var func, callback, - isArray = Util.type.array(funcs); - - if (isArray) { - func = funcs.shift(); - - callback = function() { - return exec.series(funcs); + exec.series = function(funcs, callback) { + var fn, + i = funcs.length, + check = function(error) { + var done; + + --i; + + if (!i || error) { + done = true; + exec(callback, error); + } + + return done; }; - - exec(func, callback); - } + + if (!Array.isArray(funcs)) + throw(Error('funcs should be array!')); + + fn = funcs.shift(); + + exec(fn, function(error) { + if (!check(error)) + exec.series(funcs, callback); + }); + }; + + exec.each = function(array, iterator, callback) { + var listeners = array.map(function(item) { + return iterator.bind(null, item); + }); + + if (!listeners.length) + callback(); + else + exec.parallel(listeners, callback); + }; + + exec.eachSeries = function(array, iterator, callback) { + var listeners = array.map(function(item) { + return iterator.bind(null, item); + }); + + if (typeof callback !== 'function') + throw Error('callback should be function'); + + if (!listeners.length) + callback(); + else + exec.series(listeners, callback); }; /**