当前位置: 首页 > 知识库问答 >
问题:

本地修改数据的Firebase同步:处理错误和全局状态

夔高寒
2023-03-14

关于Firebase web平台将本地修改的数据同步到服务器,我有两个相关的问题:

每个共享Firebase数据库的客户机都维护任何活动数据的内部版本。在更新或保存数据时,将其写入数据库的此本地版本。然后,Firebase客户机将数据与Firebase服务器和其他客户机进行“尽力而为”的同步。

数据修改方法(set()remove()等)可以采用oncomplete回调参数:

var onComplete = function(error) {
  if (error) {
    console.log('Synchronization failed');
  } else {
    console.log('Synchronization succeeded');
  }
};

fredRef.remove(onComplete);
    null
  • 权限被拒绝(由于安全规则)?
  • 数据库位置不存在?

有没有办法区分暂时性错误和永久性错误?

我们应该如何处理/从这些错误中恢复?

window.addEventListener('beforeunload', function (event) {
    if (!firebase.isAllModifiedDataSynced()) {
        event.returnValue = 'Some changes have not yet been saved. If you ' +
                            'leave this page, your changes will be lost.';
    }
});

var connectedRef = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com/.info/connected");
connectedRef.on("value", function(snap) {
  if (snap.val() === true) {
    alert("connected");
  } else {
    alert("not connected");
  }
});

特殊的/.info/connected位置可以连接到BeforeUnload事件侦听器,如下所示:

var connectedRef = new Firebase('https://myapp.firebaseio.com/.info/connected');
var isConnected  = true;

connectedRef.on('value', function (snap) {
    isConnected = snap.val();
});

window.addEventListener('beforeunload', function (event) {
    if (!isConnected) {
        event.returnValue = 'Some changes have not yet been saved. If you ' +
                            'leave this page, your changes will be lost.';
    }
});

我的问题是:

  • 如果isconnectedtrue,这是否也意味着已将所有修改的数据同步到服务器?
  • 即。“连接”是否也意味着“同步”?
    null

共有1个答案

鲁博瀚
2023-03-14

在上面的示例中,fredRef.remove()回调应该接收什么样的错误?

客户端脱机(网络连接丢失)?

否,这不会导致错误传递给完成侦听器。它只会导致完成侦听器(尚未)未被调用。

不,这不会导致对完成侦听器造成错误。

如果isConnected为true,这是否也意味着所有修改的数据都已同步到服务器?即“连接”是否也意味着“同步”?

不,它不是。当与数据库建立连接时,.info/connected将使用true激发。

应用程序是否需要手动跟踪每次onComplete回调的同步成功/失败结果?

这取决于用例。但是,如果您只想知道所有写操作都在什么时候执行,那么就推送一个虚拟值,然后等待它完成。由于Firebase按顺序执行写操作,所以您可以确定在该阶段已经获得了其他事件。

 类似资料:
  • 我正在使用Apollo与用React编写的Web应用程序中的GraphQL服务器进行交互。我试图在应用程序中实现错误处理,并依赖于apollo-link-error。 现在,我需要处理两类错误: 可以在执行Apollo查询或变异的组件中本地处理的错误,即需要在其上显示上下文错误信息的无效表单字段 可以全局处理的错误,例如,通过在页面的某个位置显示toast通知来显示错误详细信息 显然,一旦错误在本

  • 问题内容: 假设我有一个全局变量。在函数定义中,我们还有一个名为的局部变量。有什么方法可以将全局变量的值分配给局部变量的值? 问题答案: 使用内置功能。 返回表示当前全局符号表的字典。 这始终是当前模块的字典(在函数或方法中,这是定义该模块的模块,而不是从中调用该模块的模块)。 顺便说一句,值得一提的是,全局只是模块范围内的“全局”。

  • 问题内容: 我想全局拦截某些错误情况,以防止控制器自己处理错误。我认为我需要HTTP拦截器,但是我不确定如何从我的控制器中处理错误。 我有一个像这样的控制器: 和这样的HTTP拦截器: 这与浏览器重定向到“ /错误”路径一样有效。但在承诺抓的 也 执行了,我不希望这样。 我知道我可以编写代码,使其忽略404错误,但这是无法维护的。假设我进行修改以同时处理500个错误,那么我将不得不再次进行修改(以

  • 问题内容: 当我的网站是100%jQuery时,我曾经这样做: 为401错误设置全局处理程序。现在,我将angularjs与和一起使用,以向服务器发送(REST)请求。有什么办法可以类似地用角度设置全局错误处理程序吗? 问题答案: 我还在建立一个带有angular的网站,并且遇到了同样的障碍来处理全局401。当我遇到此博客文章时,我最终使用了HTTP拦截器。也许您会发现它和我一样有用。 “基于An

  • 接口说明 修改指定的数据处理任务的状态 API地址 POST /api/upload/1.0.0/updateTask 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 title string form 否 标题 position string form 否 位置(例如:'120,30,0') description string form 否 描述 dataGuid str

  • 我使用spring-boot-starter-amqp1.4.2.Producer和消费者工作正常,但有时传入的JSON消息语法不正确。这会导致以下(正确)异常: 未来我可能会面临更多的例外。因此,我想配置一个全局错误处理程序,这样,如果任何一个消费者中存在任何异常,我就可以全局处理它。 注意:在这种情况下,消息根本没有到达消费者。我想在消费者中全局处理这类异常。 请找到以下代码: RabbitC