我正在尝试开发一个Cloud Function,该功能使用某个金额的值,然后取总计并将该金额添加到该总计上,然后用新金额重写该总计。
到目前为止,这就是我所拥有的:
exports.newRequest = functions.database.ref("/aRef/{aUID}/{bUID}").onCreate((snapshot, context) =>{
var requestSnapshot = snapshot.data;
console.log('Testing stuff', context.params.aUID);
var UID= context.params.aUID;
var thisAmount= requestSnapshot.child('amount').val();
var totalAmount= functions.database.child('aRef').child('bRef').child(UID).child('totalAmount').val();
var finalAmount = totalAmount+ thisAmount;
return functions.database().ref(`aRef/bRef/${UID}/totalAmount`).set(finalAmount);
});
这是我得到的错误:
TypeError: Cannot read property 'Id' of undefined
at exports.newRequest.functions.database.ref.onWrite.context (/user_code/index.js:14:44)
at cloudFunctionNewSignature (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:114:23)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:144:20)
at /var/tmp/worker/worker.js:827:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
我知道错误导致我进入第14行,在这种情况下,该行试图获取{Id}
的值,但不知道如何纠正该错误?
答案 0 :(得分:0)
您的函数定义很遥远。它应该接受第一个参数(即快照)和第二个参数(即上下文)。您现在所拥有的似乎正在尝试将两个对象合并为一个名为context
的参数。
您可能想回到the documentation并了解数据库onWrite触发器如何工作。
答案 1 :(得分:0)
因此,在经过一点点挖掘和Doug Stevenson的帮助之后,我错误地调用了/试图从上下文而不是快照中获取数据,并且试图从我的DB的另一个区域获取数据,而没有放入.once( ).then()检索快照。我也不需要onWrite方法,但是需要onCreate方法。
以下任何需要的最终代码。
exports.onRequest = functions.database.ref("/Donations/{UID}").onCreate((snapshot, context) =>{
var requestSnapshot = snapshot.val();
var ID = snapshot.child('toid').val();
var thisAmount = snapshot.child('amount').val();
var database = admin.database().ref(`/users/charity/${ID}/acc/totalAmount`);
return database.once('value').then (snapshot =>{
var totalAmount = snapshot.val();
var finalAmount = totalAmount + thisAmount;
console.log('status', snapshot.child('amount').val());
return database.set(finalAmount);
});
});