此问题已在此处有答案:
Getting an array of Promises after async await(1个答案)
9小时前关闭。
我是JavaScript和异步函数的新手。我试图在我的存储库中按ID查找一些项目。
我是这样打电话的
const foundedSectionsList = sections.map(async (sectionId) => {
return await sectionsRepository.getSectionById(sectionId)
})
console.log(foundedSectionsList)
这就是我的结果:
[
Promise { <pending> },
Promise { <pending> },
Promise { <pending> },
Promise { <pending> }
]
为什么会这样?我确实在map函数上使用了async,而且我正在等待仓库的响应。
我尝试改变async和await的位置。
1条答案
按热度按时间twh00eeo1#
你在数组中得到promise是因为当你调用这些异步函数时,当你在map中传递它们时,它们不会等待结果的到来。Map将直接运行,无需等待上一次函数调用。
同样,这也不是在map内部调用异步函数的正确方法。正确的方法是使用Promise. all。
all()方法返回一个promise,当所有的输入promise都被解析时,这个promise就会被解析。返回的promise解析为输入promise的结果数组
输出如下所示:
当所有promise都已解析时,这些promise的值将作为数组传递到then()方法的回调中。之后将返回结果。
all()方法接受一个promise列表,并返回一个新promsie,如果所有输入promise都已解析,则该promsie解析为输入promise的结果数组;或者说,是第一个被拒绝的人。
您应该使用Promise.all()方法来聚合来自多个异步操作的结果。
我希望它能澄清你的疑问。干杯伙计!:)