加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何/如何链接for循环中的firebase事务的promises

发布时间:2020-12-17 17:13:02 所属栏目:安全 来源:网络整理
导读:我希望通过Firebase事务增加几个计数器,并在firebase中添加一个新值.关键是我要确保它是否全部成功保存任何数据. 我想这最好用承诺来完成吗?不幸的是我对它们不是很熟悉 到目前为止,我有: $scope.addNewPost = function() { var ref = new Firebase(FBURL)
我希望通过Firebase事务增加几个计数器,并在firebase中添加一个新值.关键是我要确保它是否全部成功保存任何数据.

我想这最好用承诺来完成吗?不幸的是我对它们不是很熟悉

到目前为止,我有:

$scope.addNewPost = function() {
  var ref = new Firebase(FBURL).child('/posts').push();
  var onComplete = function(error) {
    if (error) {
      alert('Error: Something went wrong when creating your post please try again');
      throw new Error(error);
    } else {
      $scope.reset(); // or redirect to post
    }
  };
  var tags = $scope.post.tags.split(',');
  console.log(tags);
  angular.forEach(tags,function(value,index){
    var refTag = new Firebase(FBURL).child('/tags/' + value);
    refTag.transaction(function(current_value) {
      return current_value + 1;
    });
  });
  ref.set($scope.post,onComplete);
};

任何人都可以指点我如何实现这一点或提供建议吗?
也许有更好的Angularfire方法来做到这一点?

将跟进问题移至new question dealing specifically with error handling

解决方法

您可能希望将 $q.all视为承诺的包装器.基本上,如果所有承诺都成功完成承诺列表,则会解决$q.all承诺,否则将被拒绝.

//assuming $q is injected as a service
var transactions = [];
angular.forEach(tags,index){
  var dfd = $q.defer();
  var refTag = new Firebase(FBURL).child('/tags/' + value);
  refTag.transaction(function(current_value) {
    dfd.resolve( current_value + 1 );
    return current_value + 1;
  });
  transactions.push( dfd.promise );
});

$q.all( transactions ).then(
  function(){ 
    /*Resolved values of the promises are set to arguments in order*/
    ref.set( $scope.post,onComplete ); 
  },function(){
   //generally handle errors here,but your example does not show rejections are possible
  }
)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读