下面我有我的firebase collection - payments
火力地堡雲功能觸發兩次的onUpdate
"payments": {
"$paymentId": {
"totalAmount": {
},
"balanceAmount": {
".validate": "newData.val()<=data.child('totalAmount').val()"
},
"paymentDetails": {
"$detailId": {
"amount": {
".validate": "newData.isString()"
},
}
},
}
}
,並寫在下面,能夠處理該收集某些更新雲功能設置規則:
exports.calculateBalance = functions.database
.ref('payments/{pushId}')
.onUpdate(event => {
const paymentRef = event.data.adminRef;
const payment = event.data.val();
return paymentRef.once('value').then(snapshot => {
var paidAmount = 0;
snapshot.child("paymentDetails").forEach(function(child) {
paidAmount += parseFloat(child.child("amount").val());
});
return paidAmount;
}).then(snap => {
payment.balanceAmount = parseFloat(payment.totalAmount) - snap;
return paymentRef.set(payment);
})
});
其簡單,每當我添加付款詳情,我想更新balanceAmount
。這裏的問題是,無論何時在該集合處發生更新,該功能都會觸發兩次。第一次從應用程序和第二次顯然是因爲paymentRef.set(payment);
行。
是否有任何可能的方式我能避免雲功能,這第二個觸發?自支付細節更新發生多次以來,我無法在collection
級別使用任何標誌。有人能指導我在這個方向上正確嗎?
編輯
注 - 我已經爲進入付款細節的編輯選項。
你可以可以'off'刪除該節點上的監聽器,然後調用'on'再次設置監聽器(我不是一個好的網頁開發人員,但我在android上使用這種方法) –
你可以更新付款明細或只是創建它? – Pipiks