0

如果已经发布了相同的帖子,我有如下代码不写入数据库。

我放了一个returnself.addtoDB()仍然被执行。检查现有帖子而不写入数据库(如果存在)的正确方法是什么?

db.collection("posts")
    .where("ytid", "==", self.youtubeId)
    .get()
    .then(function(querySnapshot) {
      querySnapshot.forEach(function(doc) {
        // doc.data() is never undefined for query doc snapshots
        console.log(doc.id, " => ", doc.data());
        alert("This gameplay has already been posted");
        return;
      });
    })
    .catch(function(error) {
      console.log("Error getting documents: ", error);
    });
  self.addToDB();
4

1 回答 1

1

与所有返回承诺的函数一样,get() 立即返回,您提供的回调then将在查询完成后的一段时间后调用。之后,您的代码会立即继续执行self.addToDB(),而无需等待结果。相反,您应该在该回调中执行所有条件处理。

    .then(function(querySnapshot) {
      if (querySnapshot.docs.length > 0) {
        const doc = querySnapshot.docs[0];
        console.log(doc.id, " => ", doc.data());
        alert("This gameplay has already been posted");
      }
      else {
        self.addToDB();
      }
    })
于 2020-10-03T23:39:01.127 回答