node.js - 从 firestore 获取数据时使用 async forEach 循环

标签 node.js firebase async-await google-cloud-firestore

我的 firestore 数据有点像这样:

“支持”:{ "用户ID":"abcdxyz", “消息”:“你好” }

我正在使用nodejs来获取我的数据,我还想显示发送此消息的人的电子邮件地址和姓名。所以我使用以下功能:

database.collection("support").get().then(async function (collections) {
var data = [];
console.log("data collected");
collections.forEach(async function (collection) {
    var temp = {};
    var collectionData = collection.data()
    var userInfo = await getUserDetails(collectionData.userId)
    temp.name = userInfo.name
    temp.supportMessage = collectionData.supportMessage
    data.push(temp)
    console.log("data pushed")
});
    console.log("data posted")
    return res.status(200).end(JSON.stringify({ status: 200, message: "Support Message fetched successfully.", data: data }))
}).catch(error => {
    return res.status(500).end(JSON.stringify({ status: 500, message: "Error: " + error }))
});

这里日志的顺序如下:收集数据、发布数据、推送数据

我想要这样的顺序:收集数据,推送数据(x次),发布数据

最佳答案

我在@estus评论的帮助下解决了我的答案。

信用:@estus

var data = [];
var tempCollection = [];
collections.forEach(collection => {
    tempCollection.push(collection.data());
});
for (collection of tempCollection) {
    var temp = {};
    var userInfo = await getUserDetails(collection.userId)
    temp.name = userInfo.name
    temp.supportMessage = collection.supportMessage
    data.push(temp)
}

它很轻松地解决了我的问题。

关于node.js - 从 firestore 获取数据时使用 async forEach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149138/

相关文章:

firebase - 如何使用domains.google.com验证我的自定义域

swift - 从 Firebase Snapshot Swift 中仅获取第一个对象

javascript - 在 Lambda 函数中使用 Firebase API AWS

c# - SemaphoreSlim.WaitAsync 延续代码

.net - 如何向 .NET 4.5 WCF 服务添加异步支持,以免中断现有客户端?

c# - 异步处理 IEnumerable<Task>,并发性有限

javascript - 客户端两次连接到服务器,Socket.io

javascript - 使用外部 URL 响应请求

node.js - 在 Node 中手动运行垃圾收集

javascript - express req.session 对象是如何持久化的?