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 */