【发布时间】:2014-01-18 10:37:22
【问题描述】:
在我的 Angular 应用程序中,我想通过混合事务和设置来更改我的 Firebase 中的多个位置。我用a little help 写了一个承诺链。现在我需要处理可能发生的任何错误。
如果任何承诺发生错误,我想回滚在 firebase 中所做的任何更改(成功的承诺)并提醒用户注意失败。
当前代码如下
$scope.addNewPost = function() {
var refPosts = new Firebase(FBURL).child('/posts').push();
// Get tags into array for incrementing counters
var tags = $scope.post.tags.split(', ');
var allPromises = [];
// Iterate through tags and set promises for transactions to increment tag count
angular.forEach(tags, function(value, index){
var dfd = $q.defer();
var refTag = new Firebase(FBURL).child('/tags/' + value);
refTag.transaction( function (current_value) {
return current_value + 1;
}, function(error, committed, snapshot) {
if (committed) {
dfd.resolve( snapshot );
} else {
dfd.reject( error );
}
});
allPromises.push( dfd.promise );
});
// Add promise for setting the post data
var dfd = $q.defer();
refPosts.set( $scope.post, function (error) {
if (error) {
dfd.reject(error);
} else {
dfd.resolve('post recorded');
}
});
allPromises.push( dfd.promise );
$q.all( allPromises ).then(
function () {
$scope.reset(); // or redirect to post
},
function (error) {
// error handling goes here how would I
// roll back any data written to firebase
alert('Error: something went wrong your post has not been created.');
}
);
};
所以我需要知道的是,如果其中一个承诺失败,我如何回滚我的 firebase 数据发生的任何更改。 firebase 中可能会发生任意数量的更新。 (例如:通过事务增加 3 个标签并设置发布数据)
我将如何编写失败函数来计算成功并撤消它?如果这是可能的。
----------------原帖子问题已解决---------------
你如何强制错误?我试过设置一个像下面这样的变量,但它似乎不起作用,我的 .then 有什么问题吗?
refPosts.set( $scope.post, function (error) {
var forceError = true;
if (forceError) {
dfd.reject(forceError);
} else {
dfd.resolve('post recorded');
}
allPromises.push( dfd.promise );
});
【问题讨论】:
-
我正在尝试做同样的事情(创建 angular-firebase 博客,带有可以过滤的文章标签)。你有没有想过这个问题?
标签: angularjs error-handling firebase promise angularfire