【发布时间】:2020-10-20 17:19:49
【问题描述】:
我现在使用 firestore 有一段时间了,我想实现一个调用以从子集合中获取数据。
我必须创建一个异步调用,而 foreach() 方法没有等待调用并继续,但它与 for() 方法一起工作。有人可以向我解释为什么 for() 等待而 foreach() 没有吗?
Foreach() - 不起作用
export const FirebaseSearchUsers = async (search: string) => {
const end = search.replace(/.$/, c => String.fromCharCode(c.charCodeAt(0) + 1));
let users: UserDocument[] = [];
await firestore()
.collection(FirebaseConstraints.UserCollection)
.where('username', '>=', search)
.where('username', '<', end)
.limit(10)
.get()
.then(async x => {
x.forEach(async y => {
let userDocument: UserDocument = y.data() as UserDocument;
userDocument.houseInvites = [];
await y.ref
.collection(FirebaseConstraints.HouseInvitesCollection)
.get()
.then(x => x.forEach(x => userDocument.houseInvites.push(x.data() as HouseInviteDocument)));
users.push(userDocument);
});
});
return users;
};
For() - 有效
export const FirebaseSearchUsers = async (search: string) => {
const end = search.replace(/.$/, c => String.fromCharCode(c.charCodeAt(0) + 1));
let users: UserDocument[] = [];
await firestore()
.collection(FirebaseConstraints.UserCollection)
.where('username', '>=', search)
.where('username', '<', end)
.limit(10)
.get()
.then(async x => {
for (let y of x.docs) {
let userDocument: UserDocument = y.data() as UserDocument;
userDocument.houseInvites = [];
await y.ref
.collection(FirebaseConstraints.HouseInvitesCollection)
.get()
.then(x => x.forEach(x => userDocument.houseInvites.push(x.data() as HouseInviteDocument)));
users.push(userDocument);
}
});
return users;
};
【问题讨论】:
标签: reactjs typescript react-native google-cloud-firestore async-await