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']
  });