我在我的应用程序中使用了AngularJS和FireBase。当用户按下按钮时,我想将拍卖项目的价格提高0.01美元,并在提交给FireBase DB后 - 从用户余额中扣除1.00美元。我用的是火力交易(),但该项目的值不更新火力DB:Firebase事务不会更新Firebase数据库中的实际值
$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被执行,没有错误,但快照值是错误的。当我检查伪造时,我可以确认该值没有在那里更新。奇怪...... 这里还有一件奇怪的事情:当我非常快速地点击几次按钮时,一些事务实际上正在提交。 有没有人遇到类似的行为或有解释?我的代码似乎是正确的...或不是?
我只是把这段代码放在一个小提琴中,它的功能和广告一样:http://jsfiddle.net/katowulf/N2WZE/ – Kato
@Kato你是对的,真正的问题不是在交易中,但在其他更新相同数据的代码部分。我回答了我自己的问题,见下文。 –