Skip to content

Instantly share code, notes, and snippets.

@Yopadd
Created February 16, 2018 07:15
Show Gist options
  • Save Yopadd/d1381e0fdc1aa6bedaeb36b7a8381892 to your computer and use it in GitHub Desktop.
Save Yopadd/d1381e0fdc1aa6bedaeb36b7a8381892 to your computer and use it in GitHub Desktop.
return a flatten map resolved by async function
async function asyncFlatMap (arr, asyncFn) {
return Promise.all(flatten(await asyncMap(arr, asyncFn)))
}
function asyncMap (arr, asyncFn) {
return Promise.all(arr.map(asyncFn))
}
function flatMap (arr, fn) {
return flatten(arr.map(fn))
}
function flatten (arr) {
return [].concat(...arr)
}
module.exports = {
asyncFlatMap,
asyncMap,
flatMap,
flatten
}
@t1u1
Copy link

t1u1 commented Jun 15, 2025

I guess asyncFlatMap() is still convenient to have. Modern definition (hat tip to Gemini AI):

async function asyncFlatMap<T, O>(arr: T[], asyncFn: (t: T) => Promise<O[]>): Promise<O[]> {
    const promises = arr.map(asyncFn);
    const nestedArray = await Promise.all(promises);
    return nestedArray.flat();
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment