消防站的承诺

时间:2018-07-31 17:36:32

标签: node.js database react-native google-cloud-firestore

由于我是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);
}

输出: 每次之后 持续, 假, 是

期望的输出: 假,真,每次

2 个答案:

答案 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;
    });
}

这很好用,如果我需要的东西存在,它会返回。