Firebase连接状态侦听器在javascript中返回false

Firebase连接状态侦听器在javascript中返回false,javascript,firebase,Javascript,Firebase,每次我运行这个脚本时,它第一次显示“未连接”,之后显示“已连接”。为什么它总是先触发“未连接”? 有一些题目和这个题目一样,但没有答案 var connectedRef = firebase.database().ref(".info/connected"); connectedRef.on("value", function(snap) { if (snap.val() === true) { alert("connected"); } else { alert("no

每次我运行这个脚本时,它第一次显示“未连接”,之后显示“已连接”。为什么它总是先触发“未连接”? 有一些题目和这个题目一样,但没有答案

var connectedRef = firebase.database().ref(".info/connected");
connectedRef.on("value", function(snap) {
  if (snap.val() === true) {
    alert("connected");
  } else {
    alert("not connected");
  }
});

这是Firebase的一个正常的、故意的功能,可以避免任何竞争条件

参考文件:

请注意,您的应用程序应将断开连接的操作排队,然后再执行 用户被标记为在线,以避免在以下情况下出现任何竞争条件: 在两个命令都可以执行之前,客户端的网络连接已丢失 发送到服务器


加载页面时,Firebase客户端最初未连接到其后端服务器。因此它将
.info/connected
标记为
false

然后开始建立连接,这可能需要一些时间。如果/在建立连接时,它将
.info/connected
标记为
true


这是预期的行为。如果它给你的应用程序带来了问题,那么你很可能是在试图使用该指示器来做一些它可能不直接适合的事情。如果是这样的话,分享你的用例可能会更容易得到帮助。

请确保
snap.val()
包含字符串或bool形式的真实值,然后进行相应的比较,你可以通过在
之前打印
snap.val()
检查,如果
也使用了JSON.stringify(snap),我第一次看到总是false,然后是真的。谢谢,现在说得通了。但基本上,如果没有firebase连接,我需要显示警报。每次用户打开页面时,都需要检测firebase是否关闭或连接是否随时关闭。正如预期的那样,这是一个错误。使用
.info/connected
显示模式警报是一种糟糕的用户体验。使用它来显示“连接到服务器”指示器通常是更好的用户体验。