【问题标题】:Firebase connection state listener returns false in javascriptFirebase 连接状态侦听器在 javascript 中返回 false
【发布时间】:2017-09-19 16:28:09
【问题描述】:

每次我运行这个脚本时,它都会第一次显示“未连接”,然后显示“已连接”。为什么总是先触发“未连接”? 有一些主题与link 类似,但没有答案。

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

【问题讨论】:

  • 请确保snap.val()包含字符串或布尔值的真实值,然后进行相应比较,您可以通过在if之前打印snap.val()来检查
  • 也用过JSON.stringify(snap),我看到总是第一次是假的,然后是真的。

标签: javascript firebase


【解决方案1】:

这是 Firebase 的一个正常的、有目的的功能,以避免任何竞争条件。

参考文档: https://firebase.google.com/docs/database/web/offline-capabilities

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

【讨论】:

    【解决方案2】:

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

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

    这是预期的行为。如果它给您的应用程序带来了问题,那么您很可能正在尝试将指标用于它可能不直接适合的东西。如果是这种情况,如果您分享您的用例,可能会更容易提供帮助。

    【讨论】:

    • 谢谢,现在说得通了。但基本上,如果没有 firebase 连接,我需要显示 alert 。每次用户打开页面时,都需要检测firebase是否关闭或连接是否随时关闭。
    • 正如预期的那样,这是一个XY problem。使用.info/connected 显示模式警报是一种糟糕的用户体验。使用它来显示“已连接到服务器”指示器通常是更好的用户体验。
    猜你喜欢
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 2021-08-04
    • 1970-01-01
    • 2017-11-04
    • 2014-05-27
    相关资源
    最近更新 更多