Skip to content

Instantly share code, notes, and snippets.

@zeropaper
Created September 9, 2014 10:53
Show Gist options
  • Save zeropaper/c7a9b3a4e3da1c309d45 to your computer and use it in GitHub Desktop.
Save zeropaper/c7a9b3a4e3da1c309d45 to your computer and use it in GitHub Desktop.
the async.series function, unleashed
// borrowed from async.js because I dislike promises (very much)
// https://github.com/caolan/async/blob/master/lib/async.js
function _eachSeries(arr, iterator, callback) {
callback = callback || function () {};
if (!arr.length) {
return callback();
}
var completed = 0;
var iterate = function () {
iterator(arr[completed], function (err) {
if (err) {
callback(err);
callback = function () {};
}
else {
completed += 1;
if (completed >= arr.length) {
callback();
}
else {
iterate();
}
}
});
};
iterate();
}
function series(tasks, callback) {
callback = callback || function () {};
var results = {};
_eachSeries(Object.keys(tasks), function (k, callback) {
tasks[k](function (err) {
var args = Array.prototype.slice.call(arguments, 1);
if (args.length <= 1) {
args = args[0];
}
results[k] = args;
callback(err);
});
}, function (err) {
callback(err, results);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment