Skip to content

Instantly share code, notes, and snippets.

@chemdemo
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chemdemo/9155713 to your computer and use it in GitHub Desktop.
Save chemdemo/9155713 to your computer and use it in GitHub Desktop.
async queue
/**
example:
function async(n, callback) {
setTimeout(function() {
callback(n);
}, n);
}
queue([100, 200], async, function(err, r) {console.log(r);}); // => [100, 200]
**/
function queue(arr, iterator, ignoreErr, callback) {
var aLen = arguments.length;
var result = [];
var len = arr.length;
var i = 0;
if(aLen < 3) throw Error('callback required');
if(aLen === 3) {
callback = ignoreErr;
ignoreErr = false;
}
function next() {
if(i < len) {
iterator(arr[i], function(err, r) {
if(err && !ignoreErr) {
callback(err, result);
} else {
result[i++] = r;
next();
}
});
} else {
callback(null, result);
}
};
next();
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment