【问题标题】:Using orderByChild("column"), equalTo("value"), not returning any data使用 orderByChild("column"), equalTo("value"),不返回任何数据
【发布时间】:2016-01-21 13:18:37
【问题描述】:

我正在运行以下查询,但它没有返回任何结果。但是,如果我将 child_add 更改为 .on("value"),它会返回正确的结果。似乎任何时候我将.equalToorderByChildequalTo 一起使用它都不会返回结果。

orderByChild("column").equalTo("value").on("child_added")

更新

问题的实际原因似乎是:

function handleResult(vError, aData) { 
  console.log("auth with token successfully"); 
}
ref.authWithCustomToken(Token, handleResult);
ref.authWithCustomToken(Token, handleResult);
ref.authWithCustomToken(Token, handleResult);

这只会记录到控制台一次。 确保在使用新 Firebase 时使用相同的 URL。

【问题讨论】:

  • 从您的自我回答看来,您已经找到了原因。如果没有看到重现问题的最小代码,那么很难说什么。
  • 嘿弗兰克,你可以命令 ref.authWithCustomToken(Token, function (vError, aData) { console.log("auth with token succeed"); }); 3 次,你会注意到它只会登录到控制台一次。确保在使用新 Firebase 时使用相同的网址。
  • 所以在你的答案中准确地输入代码序列。我将进行第一次尝试,但在您的问题下方也有一个方便的编辑链接。我们之前有一次关于这个的问题(随后的调用确实取消了之前的调用),但我现在找不到它。在问题和答案中包含正确的代码可以帮助其他人找到您的问题(并希望解决他们的问题)。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

我能够找到答案,就像https://www.firebase.com/docs/web/api/firebase/authwithcustomtoken.html 和其他权威人士提到的那样:

对同一数据库的所有 Firebase 引用共享相同的身份验证状态,因此如果您调用 new Firebase("https://.firebaseio.com/") 两次并在其中一个上调用任何身份验证方法,它们都将通过身份验证。

这样做的问题是,如果您多次执行 authWithCustomToken 并传递回调,它只会执行最后一次调用的回调。因此,如果您的代码期望您的回调函数对所有 authWithCustomToken 调用都执行,那么此时您将失败。

我的解决方案是首先调用 reg.getAuth() 并根据返回值运行 authWithCustomToken 或简单地使用成功值执行我的回调。

对于 firebase 团队,我建议执行传递给 authWithCustomToken 的回调,即使用户已多次调用它,否则,它需要更多代码、变得更复杂并且会欺骗许多用户。接下来,我将使用更多信息更新您的知识库,以免用户被此问题所困扰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-26
    • 2017-08-22
    • 2016-03-08
    • 2018-09-01
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多