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); }; 任何人都可以指点我如何实现这一点或提供建议吗? 将跟进问题移至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 } ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |