将数据添加到 firebase 时如何在 Angularfire 上未发送数据时捕获错误?

How to Catch Error When Data is not Sent on Angularfire when adding data to firebase?

我正在使用 angularfire 将数据保存到我的 firebase 中。这是一个快速代码。

$scope.users.$add({ 
            Name:$scope.username,
            Age:$scope.newage,
            Contact: $scope.newcontact,
          });

 alert('Saved to firebase');

我已成功将这些数据发送到我的 firebase,但是如果这些数据未成功保存,我该如何捕获错误?有什么想法吗?

编辑

所以在执行 then() 函数之后。

$scope.users.$add({   
        Name:'Frank',
        Age:'20',
        Contact: $scope.newcontact,
      }).then(function(ref) {
 alert('Saved.');
 }).catch(function(error) {
 console.error(error); //or
 console.log(error);
 alert('Not Saved.');
 });

连接到互联网时。 then() 函数很好。在显示警报之前,它会等待这些数据保存在 firebase 中。 我想要的是它告诉我数据没有保存。当我关闭互联网连接并提交这些数据时,捕捉错误功能没有触发。

当您称 $add() 为 returns 承诺时。要检测数据何时保存,请实施 then()。要检测保存失败的时间,请执行 catch():

var list = $firebaseArray(ref);
list.$add({ foo: "bar" }).then(function(ref) {
  var id = ref.key;
  console.log("added record with id " + id);
  list.$indexFor(id); // returns location in the array
}).catch(function(error) {
  console.error(error);
});

参见documentation for add()

更新

当涉及到 Firebase 数据库时,检测何时由于没有网络连接而无法保存数据是一个非常不同的问题。在这种情况下无法保存不是错误,而只是一种临时情况。此条件不仅适用于此 set() 操作,而且适用于所有 read/write 操作。因此,您应该更全面地处理它,通过 detecting connection state:

var connectedRef = firebase.database().ref(".info/connected");

connectedRef.on("value", function(snap) {
  if (snap.val() === true) {
    alert("connected");
  } else {
    alert("not connected");
  }
});

通过侦听.info/connected您的代码可以知道用户未连接到 Firebase 数据库并根据您的应用程序的需要进行处理。