Guest User

Untitled

a guest
Feb 23rd, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  *  runs callbacks in parallel and returns once all callbacks are executed
  3.  *  accept arguments as array f function or object of a function
  4.  *  should be called in form of array of object of following function
  5.  *   const tasks = [function yourName(callback) {
  6.  *           your_function(a, b, c, (data) => {
  7.  *               callback(null, data);
  8.  *           })
  9.  *   },]
  10.  *   You are able to access above  data as
  11.  *    executeParallel(tasks, (err, results) => {
  12.  *       const data = results.yourName; // your function name
  13.  *     })
  14.  */
  15. export const executeParallel = function (tasks, cb) {
  16.     let results;
  17.     let pending;
  18.     let keys;
  19.     let isSync = true;
  20.  
  21.     if (Array.isArray(tasks)) {
  22.         results = {};
  23.         pending = tasks.length;
  24.     } else {
  25.         keys = Object.keys(tasks);
  26.         results = {};
  27.         pending = keys.length;
  28.     }
  29.  
  30.     function done (err) {
  31.         function end () {
  32.             if (cb) cb(err, results);
  33.             cb = null;
  34.         }
  35.         if (isSync) process.nextTick(end);
  36.         else end();
  37.     }
  38.  
  39.     function each (i, err, result, name) {
  40.         results[name] = result;
  41.         if (--pending === 0 || err) {
  42.             done(err);
  43.         }
  44.     }
  45.  
  46.     if (!pending) {
  47.         // empty
  48.         done(null);
  49.     } else if (keys) {
  50.         // object
  51.         keys.forEach(function (key) {
  52.             tasks[key](function (err, result) { each(key, err, result) });
  53.         })
  54.     } else {
  55.         // array
  56.         tasks.forEach(function (task, i) {
  57.             task(function (err, result) { each(i, err, result, task.name) });
  58.         })
  59.     }
  60.     isSync = false;
  61. }
Add Comment
Please, Sign In to add comment