首页 > 解决方案 > Reduce 内部的 Async/Await

问题描述

我正在尝试将async/await与该reduce方法一起使用。但不知何故,只有循环的第一次迭代有效。await第一次reduce迭代完成后,papers 对象将跳过。是否可以在从承诺中收集内容的同时使用创建对象reduce,同时等待整个过程?

减少功能:

const papers = await page.concepts.reduce(async (acc, cur) => {
  acc[cur.paperID] = await getPageData(`papers/${ cur.paperID }`, 'md')
  return acc
}, {})

注意:getPageData返回一个承诺。

标签: javascriptasync-awaitreduce

解决方案


您可以创建一组承诺,然后使用Promise.all来解决它们。如果任何请求失败Promise.all,将停止处理剩余的请求。

const papersPromises = page.concepts.map(cur => 
    getPageData(`papers/${ cur.paperID }`, 'md')
)

const result = await Promise.all(papersPromises)
// result will be an array with the results

推荐阅读