1

アプリで AngularJS と FireBase を使用しています。ユーザーがボタンを押すと、オークション アイテムの価格を 0.01 ドル上げたいと考えています。FireBase DB にコミットされた後、ユーザーの残高から 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

コールバックが実行され、エラーは発生しませんが、スナップショットの値が間違っています。Forge にチェックインすると、そこで値が更新されていないことが確認できます。奇妙な... ここでもう 1 つ奇妙なことがあります。ボタンを数回非常に速くクリックすると、いくつかのトランザクションが実際にコミットされます。誰かが同様の行動を経験したか、それについて説明がありますか? 私のコードは正しいようです...それともそうではありませんか?

4

1 に答える 1