迭代集合并尝试获取文档中的引用字段 .get() 不起作用
Iterating collection and trying to get reference field inside documents .get() is not working
我正在尝试获取一个集合然后遍历其文档。在每个文档中都有另一个集合文档的引用字段。通常如果我查询它就没有问题但是迭代会产生问题
在遍历组织成员时关注我想要获取的字段
const result = await firestore.collection("organization-members").get();
result.docs.forEach((doc) => { // or result.forEach
const data = doc.data();
const organization = data.organization;
const orgData = await organization.get() // But this says that organization.get() is not a function
});
但是如果我硬查询那么它就可以正常工作
const snap = await firestore
.doc("organization-members/BOcSNLR4bt8i0Ay4aAr7")
.get();
const orgSnap = await snap.data().organization.get();
console.log(orgSnap.data());
对象也不一样
上面的日志是我硬查询时的日志,下面的日志是我循环遍历集合文档时的日志
我做错了什么
对于遇到类似问题的其他人,此答案可能对您有所帮助
所以首先我的代码中有一个错误,但这给了我另一个答案
错误是我忘记在 forEach 函数中添加异步
应该是这样的
const result = await firestore.collection("organization-members").get();
result.docs.forEach(async (doc) => { // or result.forEach
const data = doc.data();
const organization = data.organization;
const orgData = await organization.get() // But this says that organization.get() is not a function
});
但这不是正确的方法
显然 async/await 在 forEach 循环内无法正常工作 我不知道这背后的原因 我确实联系了 firebase 团队并且那里的代表说了同样的话所以最好的方法应该是使用 for循环
例如
for(doc of result.docs)
这将始终有效
我正在尝试获取一个集合然后遍历其文档。在每个文档中都有另一个集合文档的引用字段。通常如果我查询它就没有问题但是迭代会产生问题
在遍历组织成员时关注我想要获取的字段
const result = await firestore.collection("organization-members").get();
result.docs.forEach((doc) => { // or result.forEach
const data = doc.data();
const organization = data.organization;
const orgData = await organization.get() // But this says that organization.get() is not a function
});
但是如果我硬查询那么它就可以正常工作
const snap = await firestore
.doc("organization-members/BOcSNLR4bt8i0Ay4aAr7")
.get();
const orgSnap = await snap.data().organization.get();
console.log(orgSnap.data());
对象也不一样
上面的日志是我硬查询时的日志,下面的日志是我循环遍历集合文档时的日志
我做错了什么
对于遇到类似问题的其他人,此答案可能对您有所帮助
所以首先我的代码中有一个错误,但这给了我另一个答案
错误是我忘记在 forEach 函数中添加异步
应该是这样的
const result = await firestore.collection("organization-members").get();
result.docs.forEach(async (doc) => { // or result.forEach
const data = doc.data();
const organization = data.organization;
const orgData = await organization.get() // But this says that organization.get() is not a function
});
但这不是正确的方法
显然 async/await 在 forEach 循环内无法正常工作 我不知道这背后的原因 我确实联系了 firebase 团队并且那里的代表说了同样的话所以最好的方法应该是使用 for循环
例如
for(doc of result.docs)
这将始终有效