gpt4 book ai didi

angularjs - 当 promise 链中有错误时如何回滚更改

转载 作者:行者123 更新时间:2023-12-03 07:44:44 25 4
gpt4 key购买 nike

在我的 Angular 应用程序中,我想使用交易和设置混合对Firebase中的多个位置进行更改。我已经用a little help编写了一个Promise链。现在,我需要处理可能发生的任何错误。

万一任何 promise 发生错误,我都希望回退Firebase中所做的任何更改(成功的 promise ),并提醒用户失败。

当前代码如下

$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.');
}
);
};

因此,我需要知道的是,在其中一项 promise 失败的情况下,如何回滚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 );
});

最佳答案

此行有两个实例,它们都放在错误的位置:

allPromises.push( dfd.promise );
  • 在第一个块中,它应该在forEach回调的最后一条语句中,而不是在事务回调中。
  • 在第二个块中,它应该在set()调用之后,而不是在回调中。

  • 现在您的代码编写方式, $q.all()正在获得一个空的promises数组。这也可能是干扰您正在尝试的 forceError测试的原因。

    关于angularjs - 当 promise 链中有错误时如何回滚更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20858242/

    25 4 0