【发布时间】:2021-08-25 00:57:03
【问题描述】:
我有一段异步 javascript 代码需要执行,然后可以执行下一条语句
function getEventData() {
return new Promise(resolve => {
eventList.forEach((event) => {
db.collection('Events').doc(event)?.collection('registeredStudents')?.get()
.then((querySnapshot) => {
eventData.push({"id": event, "number": querySnapshot.size})
})
})
resolve();
})
}
getEventData().then(console.log(eventData))
eventList 是一个包含 17 个元素的数组,它在数据库中列出了大约 17 次,这是低效的,但我别无选择,所以不得不这样做。无论如何,在控制台中我记录了一个空数组。我该如何解决。 PS:我是异步 javascript 和 Promise 的新手。
【问题讨论】:
-
循环发送多个异步请求可能会导致问题。您需要使用
Promise.all(...)之类的东西来确保所有承诺都得到履行。 -
我对异步有点陌生。如何确保控制台日志语句在所有承诺得到解决后运行,因为
.then语句似乎不起作用 -
我已经用一个 sn-p 更新了我的答案,它显示了你的函数应该是什么样的。
标签: javascript async-await es6-promise