由于我是Firestore的新手,因此在理解此概念的实现时遇到了麻烦。在遍历代码之前,我需要等待查询,如果foreach条件返回两个,我希望循环停止。条件应返回true,但查询完成后我将返回false
teamexist = (name) => {
var exists = false;
firebase.firestore().collection('teams').get().then(snapshot => {
snapshot.forEach(doc => {
if(doc.data().name === name) {
exists = true;
console.log(exists);
}
});
})
.catch(err => {
console.log('Error getting documents', err);
});
console.log("after each");
if(!exists){
console.log("last");
//this.checkPlayerTeams(firebase.auth().currentUser.uid);
}
console.log(exists);
}
输出: 每次之后 持续, 假, 是
期望的输出: 假,真,每次
答案 0 :(得分:0)
这是Java语言中的事件循环混乱。基本上是您的代码
if(!exists){
console.log("last");
//this.checkPlayerTeams(firebase.auth().currentUser.uid);
}
console.log(exists);
正在运行
snapshot.forEach(doc => {
if(doc.data().name === name) {
exists = true;
console.log(exists);
}
});
对FireStore进行异步调用以获取实体。
应遵循以下操作。
snapshot.forEach(doc => {
if(doc.data().name === name) {
exists = true;
console.log(exists);
}
if(!exists){
console.log("last");
//this.checkPlayerTeams(firebase.auth().currentUser.uid);
}
});
答案 1 :(得分:0)
我从其他地方得到了帮助。对于正在寻找相同信息的其他人,它正在等待Promise返回查询。
teamexist = async (name) => {
return firebase.firestore().collection('teams').where('name', '==', name).get()
.then(snapshot => {
return !snapshot.empty;
})
.catch(err => {
console.log('Error getting documents', err);
return false;
});
}
这很好用,如果我需要的东西存在,它会返回。