我正在尝试建立一个用于付款目的的计数器。现在,我正在贝宝(Paypal)的取消状态(而不是实际购买)上对其进行测试,因为目前我没有凭据。完成后,我会将大部分代码转移到实际的付款成功功能上。
是否可以通过增加现有的int字段来更新Firebase文档的int字段?
我这里的代码进入了无限循环,因为它跟踪自己的数据。
paymentCancelled: function(data) {
console.log("payment cancelled")
let db = firebase.firestore()
db.collection("users").where("userId", "==", firebase.auth().currentUser.uid)
.onSnapshot(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log("before: " + doc.data().credits)
//this is where I'm having trouble
const creditIncrement = doc.data().credits + 100
var creditRef =
db.collection("users").doc(firebase.auth().currentUser.uid);
return creditRef.update({
credits: creditIncrement
})
.then(function() {
console.log("Document successfully updated!");
return;
})
.catch(function(error) {
// The document probably doesn't exist.
console.error("Error updating document: ", error);
});
})
})
console.log(data) //logging out contents from PayPal, unnecessary atm
}
答案 0 :(得分:0)
您应该使用.get()
而不是. onSnapshot()
db.collection("users").where("userId", "==", firebase.auth().currentUser.uid)
.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
console.log("before: " + doc.data().credits)
//this is where I'm having trouble
const creditIncrement = doc.data().credits + 100
var creditRef =
db.collection("users").doc(firebase.auth().currentUser.uid);
return creditRef.update({
credits: creditIncrement
})
.then(function() {
console.log("Document successfully updated!");
return;
})
.catch(function(error) {
// The document probably doesn't exist.
console.error("Error updating document: ", error);
});
})
})
.get()
仅获取一次数据,而不是通过onSnapshot
监听数据更改
出于数据一致性的考虑,您可能需要考虑使用firestore transaction