我正在尝试将async
/ await
与reduce
方法一起使用。但是以某种方式,只有循环的第一次迭代才起作用。一旦完成第一次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/