function getInSequence(array, asyncFunc) {
  return array.reduce((previous, current) => (
    previous.then(accumulator => (
      asyncFunc(current).then(result => accumulator.concat(result))
    ))
  ), Promise.resolve([]));
}

/**
  example of use:
  var a = [1,2,3];
  var fun = (param) => { 
    return new Promise((resolve, reject) => { 
      console.log("item " + param); 
      setTimeout(() => { 
        console.log("resolving " + param * 2); 
        resolve(param * 2) 
      }, 1000 )
    })
  }

  await getInsequence(a, fun)
  // output: 
  // item 1
  // resolved 2
  // item 2
  // resolved 4
  // item 3
  // resolved 6
*/