异步映射函数等待返回 Promise 而不是值

12

我有这段代码

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

但不幸的是,它只返回一堆 promises,因为 map 中的异步函数没有被等待。我想知道是否有任何方法可以在上面的代码中等待映射函数。


3
我认为 return Promise.all((await readDir(dir)).map(...)); 应该可以工作。不确定是否必须是 await Promise.all(...) - Felix Kling
好想法!谢谢! - Zane Hitchcox
2个回答

41

尝试

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

2
如果您使用的是bluebird,您可以使用Promise.map这个更简洁的语法。
async function addFiles(dir, tree) {
  const files = await readDir(dir);
  return Promise.map(files, async (name) => { await readDir(dir); return name; });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接