12

I have this code

async function addFiles(dir,tree) {
  return (await readDir(dir))
    .map(async (name) => {await readDir(dir); return name;})
}

but unfortunately, it just returns a bunch of promises, because there the async function in map is not waited upon. I'm wondering if there is any way to await the mapped function in the above code.

Dan Dascalescu
  • 143,271
  • 52
  • 317
  • 404
Zane Hitchcox
  • 936
  • 1
  • 9
  • 23

2 Answers2

41

try

async function addFiles(dir,tree) {
  const files = await readDir(dir)
  await Promise.all(files.map(async (name) => {await readDir(dir); return name;})
}
Sitian Liu
  • 1,156
  • 10
  • 14
2

If you're using bluebird you can use this cleaner, shorter syntax with Promise.map

async function addFiles(dir, tree) {
  const files = await readDir(dir);
  return Promise.map(files, async (name) => { await readDir(dir); return name; });
}
gafi
  • 12,113
  • 2
  • 30
  • 32