我正在尝试将async / awaitreduce方法一起使用。但是以某种方式,只有循环的第一次迭代才起作用。一旦完成第一次await迭代,papers对象将跳过reduce。是否可以使用reduce创建对象,同时从承诺中收集对象的内容,同时还要等待整个过程?

缩小功能:

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


注意:getPageData返回一个承诺。

最佳答案

您可以创建一个承诺数组,然后使用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

关于javascript - 异步/等待内部减少,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59649669/

10-11 23:59