【问题标题】:Asynchronous map function that await's returns Promise instead of valueawait 的异步映射函数返回 Promise 而不是 value
【发布时间】:2016-05-02 22:25:28
【问题描述】:

我有这个代码

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

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

【问题讨论】:

  • 我相信return Promise.all((await readDir(dir)).map(...)); 应该可以工作。不确定是否必须是await Promise.all(...)
  • 好主意!谢谢!

标签: javascript async-await babeljs arrow-functions


【解决方案1】:

试试

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; });
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-18
      • 1970-01-01
      • 2019-12-29
      • 2021-06-05
      • 2020-07-09
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多