【问题标题】:Why Firebase realtime database react even through the network is disconnect?为什么即使网络断开,Firebase 实时数据库也会做出反应?
【发布时间】:2023-03-19 13:46:01
【问题描述】:

在我的应用程序中,我使用函数sendMsg() 向firebase 实时数据库发送一条消息,并使用函数monitorMsg() 监控DB 中新到达的消息。据我对firebase数据库的理解,如果设备与网络断开连接(移动数据和WiFi),当我发送消息时,我应该得到错误,monitorMsg()函数当然不能工作。但结果恰恰相反,sendMsg() 没有发现错误,monitorMsg() 采取行动。我不明白为什么会发生这种情况,firebase getset 功能不依赖于网络连接吗?

monitorMsg(){this.firechats.child(userId).child(toUserId).orderByChild("time").startAt(time).on('value', (snapshot) => {
              console.log("why this happen?????????")
              console.log(snapshot)
            });}



sendMsg(){
var promise = new Promise((resolve, reject) => {
      this.firechats.child(userId).child(toUserId).push().set(msg).then(() => {
        console.log("send msg to firebase")
      }).catch((err)=>{
        console.log("send to toUserId failed")
        reject(err)
      })
    })
}

【问题讨论】:

    标签: javascript firebase firebase-realtime-database


    【解决方案1】:

    您所观察到的一切都是正常的和预期的。

    使用实时数据库,写入不会因缺乏连接而失败。当连接恢复时,它们只是排队并稍后同步,因此您无需做任何工作即可在暂时失去连接的情况下幸存下来。仅当服务器拒绝写入时写入才会失败,例如违反安全规则或某些限制。

    此外,即使没有连接,本地侦听器也会随着本地更改立即触发。这也是使编写离线时运行良好的应用程序变得如此容易的部分原因。如果由于某种原因,写入最终被服务器拒绝,则侦听器将被调用另一个更改,该更改将“撤消”第一个更改,因此侦听器将始终看到最准确的数据视图。

    【讨论】:

    猜你喜欢
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2021-11-29
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多