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

时间:2016-04-07 09:33:43

标签: angularjs firebase firebase-realtime-database

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

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

然后仅在数据保存到firebase数据库时被调用我需要知道它是否未添加可能因为因特网连接或任何问题我需要将此问题显示给用户。 有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

Firebase将确保在恢复连接时保存数据。因此,“我需要知道数据何时未保存”的要求并不适用于Firebase的模型。

你可以处理一些案例:

  1. 检测应用程序何时未连接到Firebase后端
  2. 检测何时保存数据的时间比预期的要长
  3. 检测应用程序是否已连接到Firebase后端,您可以使用此example from the Firebase documentation

      

    对于许多与状态相关的功能,客户端可以知道它何时在线或离线。 Firebase客户端在/.info/connected处提供了一个特殊位置,每当客户端的连接状态发生更改时,该位置都会更新。这是一个例子:

    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是一个布尔值,它在客户端之间不同步,因为这些值取决于客户端的状态。换句话说,如果一个客户端将/.info/connected读为false,则无法保证单独的客户端也会读取false。

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

    要检测保存数据的时间比预期时间长**,您将使用setTimer()。在开始保存数据时启动它,在promise解析时重置(在then()中)并且如果计时器到期:将“数据未保存”处理。

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