Skip to content

Instantly share code, notes, and snippets.

@m4rw3r
Created January 6, 2013 16:00
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 m4rw3r/4468113 to your computer and use it in GitHub Desktop.
Save m4rw3r/4468113 to your computer and use it in GitHub Desktop.
var map = function(args, mapFunc)
{
var d = new Deferred(),
length = args.length,
results = [],
resolved = 0;
var mapLoop = function(i) {
var arg = typeof args[i].then == 'function' ? args[i] : new Resolved(args[i]);
arg.then(function(value) {
var ret = mapFunc(value);
if(ret && typeof ret['then'] == 'function') {
ret.then(function(value) {
results[i] = value;
if(++resolved == length) {
d.resolve(results);
}
}, function(reason) {
d.reject(reason);
});
}
else {
results[i] = ret;
if(++resolved == length) {
d.resolve(results);
}
}
}, function(reason) {
d.reject(reason);
});
};
for(var i = 0; i < length; i++) {
mapLoop(i);
}
return d;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment