Firebase等待更新值

时间:2016-08-09 14:17:00

标签: ionic-framework firebase

我想将数据发送到Firebase数据库并等待数据更新以执行其他操作,例如$ state.go或其他。

如何使用Firebase和AngularJs以良好的方式做到这一点?

这是我的代码部分:

  var ref_achats_offres = firebase.database().ref('achats_offres');
  var key_achats_offres = ref_achats_offres.push().key;
  var ladate = moment().format();
  var accountId = $localStorage.accountId;
  var push_achats_offres = ref_achats_offres.child(key_achats_offres).set({
              cout: cout,
              ajout_le: ladate,
              active:true,
              accounts: accountId,
              id_offre : id_offre,
              unique_code: code
          });

 var ref_offres = firebase.database().ref('offres');
 ref_offres.child(id_offre).child('achats_offres').child(key_achats_offres).set(true);
 var ref_accounts = firebase.database().ref('accounts');
 ref_accounts.child(accountId).child('achats_offres').child(key_achats_offres).set(true);
          firebase.database().ref('accounts').child(accountId).child('credits').transaction(function(credits) {
            return credits - cout;
          });

          $scope.modal2.hide();
          Utils.message(Popup.checkIcon, Popup.achatOffreEffectue);
          $state.go('mes_achats');

1 个答案:

答案 0 :(得分:0)

<document>set()调用返回Promise。当写操作完成时,promise将解析,您可以通过实现transaction()来处理此问题。

如果您希望两个集合操作按顺序运行,然后导航:

then()

如果您希望它们并行运行并在导航之前完成:

ref_accounts.child(accountId).child('achats_offres').child(key_achats_offres)
    .set(true)
    .then(function() {
        firebase.database().ref('accounts').child(accountId).child('credits')
            .transaction(function(credits) {
                return credits - cout;
            })
            .then(function() {
                $scope.modal2.hide();
                Utils.message(Popup.checkIcon, Popup.achatOffreEffectue);
                $state.go('mes_achats');
            });
    });