【问题标题】:Firebase query does not return anythingFirebase 查询不返回任何内容
【发布时间】:2021-04-24 06:19:48
【问题描述】:

我编写了一个用于向我的数据库发送查询并检索结果的函数。但是如果它在数据库中没有找到任何东西,它既不返回 undefined 也不返回 null

因此,我无法处理数据库中是否存在数据。

这个函数的返回值是多少?


代码:

usersRef
  .where("nickname", "==", nickname)
  .get()
  .then((querySnapshot) => {
    querySnapshot.forEach((doc) =>
      doc.data() ? console.log("a") : console.log("b")
    );// i wrote this line for testing the issue
    querySnapshot.size == 0 ? (flag = true) : (flag = false);
  })
  .catch((err) => console.log("err2"))

如果数据库中存在数据,则打印a,但如果不存在,则不打印任何内容,既不打印a,也不打印b

我在我的 React-Native 项目中使用了该代码,它还使用了 Firebase Firestore 数据库,usersRef 表示:

const db = firebase.firestore();
const usersRef = db.collection("Users");

注意:querySnapshot 始终返回 JSON 格式的 firebase 对象。 forEach中的doc参数如果以JSON格式存在则返回一个对象,否则无法处理。

注2:我也试过doc.data()== nulldoc.data()== undefineddoc.data()== ""。但他们不会在console.log() 中打印任何内容。我也试过console.log(doc.data()),没有任何改变。

【问题讨论】:

  • console.log(doc.data()) 没有记录任何内容吗?
  • 如果数据存在于我的数据库中,它会返回数据,否则不会记录。@Daniel_Knights
  • 您是否在forEach之外登录?我看不到任何事情发生的唯一原因是querySnapshot 的长度为0

标签: javascript node.js firebase google-cloud-firestore


【解决方案1】:

如果数据存在于数据库中,则打印a,但如果不存在,则既不打印a也不打印b

那是因为您正在查询数据库并返回一个数组。如果您的数组中有 1 个或多个项目,您的 .forEach 调用将遍历它们并执行您的三元表达式,从而导致控制台日志调用 - ab但是,如果你的数组是空的, 那么.forEach 将没有任何东西可以迭代,所以你传递给它的函数永远不会被执行。

[].forEach(item => console.log(item)) // nothing
[1].forEach(item => console.log(item)) // 1

所以问题是你的数据库查询在你的 Windows 机器上只是空的。检查您的flag 变量或.size 成员,您应该看看是否是这种情况:

usersRef
  .where("nickname", "==", nickname)
  .get()
  .then((querySnapshot) => {
    querySnapshot.forEach((doc) =>
      doc.data() ? console.log("a") : console.log("b")
    );
    querySnapshot.size == 0 ? (flag = true) : (flag = false);
    console.log(querySnapshot.size);
  })
  .catch((err) => console.log("err2"))

【讨论】:

    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多