async parallel functions

by crackingthefrontendinterview

JavaScript

function asyncFunc1(callback) {
  setTimeout(() => {
    callback(1);
  }, 3000);
}

function asyncFunc2(callback) {
  setTimeout(() => {
    callback(2);
  }, 2000);
}

function asyncFunc3(callback) {
  setTimeout(() => {
    callback(3);
  }, 1000);
}

function asyncParallel(arr, callback) {
  let resultCount = 0;
  let resultArr = [];

  arr.forEach((fn, idx) => {
    fn(val => {
      resultArr[idx] = val;
      resultCount++;
      if (resultCount === arr.length) {
        callback(resultArr);
      }
    })
  })
}

asyncParallel([asyncFunc1, asyncFunc2, asyncFunc3], result => {
  console.log(result); // 1, 2, 3 (prints results of each asynchronous function in order)

});