2 回答

TA貢獻(xiàn)1725條經(jīng)驗(yàn) 獲得超8個(gè)贊
看起來您編寫的代碼旨在在將新訂單添加到數(shù)據(jù)庫時(shí)運(yùn)行。但是你已經(jīng)聲明它像這樣觸發(fā):
exports.sendPushR = functions.database.ref('/request/{pid}/{uid}/orders')
.onWrite(async (snapshot, context) => {
這意味著只要在orders節(jié)點(diǎn)下為用戶編寫任何內(nèi)容,代碼就會(huì)觸發(fā)。要僅在該orders節(jié)點(diǎn)下寫入訂單時(shí)觸發(fā),請(qǐng)將觸發(fā)器定義為:
exports.sendPushR = functions.database.ref('/request/{pid}/{uid}/orders/{orderid}')
.onWrite(async (snapshot, context) => {
上面的區(qū)別在于,路徑現(xiàn)在包含{orderid}意味著它會(huì)觸發(fā)樹中的低一級(jí),并且您snapshot.after將不再包含該-L級(jí)別。
由于您實(shí)際上似乎只關(guān)心訂單何時(shí)被創(chuàng)建,因此您也只能觸發(fā)它(這意味著當(dāng)訂單被更新或刪除時(shí),您的函數(shù)不會(huì)被調(diào)用)。那會(huì)是這樣的:
exports.sendPushR = functions.database.ref('/request/{pid}/{uid}/orders/{orderid}')
.onCreate(async (snapshot, context) => {
...
const afterData = snapshot.val();
const username = snapshot.val().username;
console.log(afterData);
console.log(username);
...
});
在這里,我們?cè)俅卧?JSON 中的較低級(jí)別上觸發(fā)。但是由于我們現(xiàn)在 trigger onCreate,我們不再有前后快照,而是只是snapshot.val()為了獲取剛剛創(chuàng)建的數(shù)據(jù)。

TA貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
由于您正在檢索的對(duì)象具有生成的成員,您可以使用 for-in 循環(huán)來檢索該值。
const object = snapshot.after.val()
for(const key in object) {
if (object.hasOwnProperty(key)) {
const element = object[key];
if(element.username) {
console.log(element.username);
break;
}
}
}
添加回答
舉報(bào)