JSFiddle - React, Tailwind, and code Playground
by Turi S
JavaScript
var asyncMap = function(tasks, callback){
var results = [];
var numberCompletedResults = 0;
for(var i = 0; i < tasks.length; i++) {
var task = tasks[i];
var cb = (function(i, result){
results[i] = result;
numberCompletedResults++;
if(numberCompletedResults == tasks.length)
callback(results)
}).bind(null, i);
var cb2 = function(result) {
results[i] = result;
numberCompletedResults++;
if(numberCompletedResults == tasks.length)
callback(results);
}
task(cb2);
}
};
asyncMap([
function(cb){
setTimeout(function(){
cb('one');
}, 200);
},
function(cb){
setTimeout(function(){
cb('two');
}, 100);
}
],
function(results){
// the results array will equal ['one','two'] even though
// the second function had a shorter timeout.
console.log(results); // ['one', 'two']
});