type Callback = (value: T, index: number, array: T[]) => U; export const asyncMap = (array: T[], cb: Callback>): Promise => { const promises = new Array(array.length); for (let i = 0; i < array.length; i++) { promises.push(cb(array[i], i, array)); } return Promise.all(promises); };