【发布时间】:2013-08-07 10:43:24
【问题描述】:
我在我的应用程序中使用 AngularJS 和 FireBase。当用户按下按钮时,我想将拍卖物品的价格提高 0.01 美元,并且在它被提交到 FireBase 数据库之后 - 从用户的余额中扣除 1.00 美元。我为此使用 FireBase transaction(),但该项目的值未在 FireBase DB 中更新:
$scope.auctionPriceRef = travelBidsFirebaseRef.child('auction/' + $scope.auction.id + '/price');
$scope.auctionPriceRef.transaction(function(currentValue) {
console.log("Current val + 0.01: " + (currentValue + 0.01));
return currentValue + 0.01;
}, function(error, committed, snapshot) {
if (error) {
console.error("Error increasing auction price: " + error);
}
if (committed) {
console.log("Successfully increased auction price to: " + snapshot.val());
$rootScope.authUser.balance -= 1.0;
}
});
此代码执行没有错误,我可以在控制台看到以下输出(商品的初始价格为 1.00):
Current val + 0.01: 1.01
Successfully increased auction price to: 1
collback被执行,没有错误但是快照值错误。当我签入 Forge 时,我可以确认该值尚未在那里更新。奇怪的... 这里还有另一件奇怪的事情:当我非常快速地多次单击按钮时,实际上正在提交一些事务。 有没有人经历过类似的行为或对此有解释?我的代码似乎是正确的……还是不正确?
【问题讨论】:
-
我只是把这段代码放到了小提琴中,几乎一字不差,它就像宣传的那样工作:jsfiddle.net/katowulf/N2WZE
-
@Kato 你是对的,真正的问题不在于事务,而在于更新相同数据的代码的其他部分。我回答了我自己的问题,见下文。
标签: javascript angularjs firebase