如果没有互联网连接,如何知道添加到 angularjs 的数据是否未保存到 firebase 数据库

How to know if the added data to angularjs not saved to firebase databse if no internet connection

当我尝试使用 firebase 数组通过表单添加数据时,它会立即添加并显示在屏幕和 firebase 数据库上,但如果我禁用我的互联网连接并尝试添加数据,它会添加到 angular 应用程序中但不在 firebase 数据库中,所以如何知道添加的数据没有保存到数据库中。

Nodes.$add(preparedNode)
            .then(function (lastAddedNode ) {
                console.log( 'lastAddedNode', lastAddedNode );
                console.log( 'key()', lastAddedNode.key() );
                $scope.node.name = '';
                feedbackMessages.success();
            })

只有当数据保存到 firebase 数据库时才会调用我需要知道它是否未添加可能是因为互联网连接或任何问题我需要这个问题来向用户显示它。 有帮助吗?

Firebase 将确保在恢复连接时保存数据。出于这个原因,要求 "I need to know when the data isn't saved" 并不真正适合 Firebase 的模型。

不过你可以处理一些情况:

  1. 检测应用程序何时未连接到 Firebase 后端
  2. 检测何时保存数据花费的时间比预期的要长

检测应用程序是否连接到 Firebase 后端,您可以使用此example from the Firebase documentation:

For many presence-related features, it is useful for a client to know when it is online or offline. Firebase clients provide a special location at /.info/connected, which is updated every time the client's connection state changes. Here is an example:

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 is a boolean values which is not synchronized between clients because the values are dependent on the state of the client. In other words, if one client reads /.info/connected as false, this is no guarantee that a separate client will also read false.

这使用 Firebase JavaScript SDK。由于 AngularFire 是建立在该 SDK 之上的,因此两者可以无缝互操作。

要*检测何时保存数据花费的时间比预期的要长**,您需要使用 setTimer()。当您开始保存数据时启动它,在承诺解决时(在 then() 中)重置它,如果计时器到期:执行您的 "data hasn't saved" 处理。

请注意,Firebase 仍会将数据排队等待保存。所以当与服务器的连接恢复时,它仍然会保存数据。