【问题标题】:Firestore PromisesFirestore 承诺
【发布时间】:2019-01-08 04:29:17
【问题描述】:

由于我是 Firestore 的新手,因此无法理解这个概念的实现。在浏览代码之前,我需要等待查询,如果 foreach 条件返回两个,我希望循环停止。条件应该返回真,但查询完成后我得到假然后真

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

输出: 每次之后, 最后的, 错误的, 真的

期望的输出: 假的,真的,在每个之后

【问题讨论】:

  • 你应该从 console.log("after each");到 console.log(exists); .下面的 foreach 块正在结束。
  • 为什么要对我说我不明白的问题投反对票?如果他们一直被否决,为什么有人会问问题。

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


【解决方案1】:

这是 Javascript 中的事件循环的混淆。基本上是你的代码

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

【讨论】:

  • 我可以这样做,但我希望 for Each 在 exists = true 时完成,尽管文档返回 true 并不会停止 firestore 文档中所述的枚举。一旦该值为真,它就需要停止查看其他文档。基本上我想要一个返回的值,该值表明该 foreach 内部的条件为真,然后对真值或假值执行某些操作。
【解决方案2】:

我从其他地方得到了帮助。对于正在寻找相同信息的任何其他人,它正在等待 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;
    });
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多