函數正在觀察proposals/{jobid}/{propid}
。當添加新建議並且child("isinvitation")
爲空時,該功能成功地將新節點寫入proposals/sent
,然後將增量添加到作業jobs/${jobid}
的建議子項。Firebase的雲端函數在執行前中斷
當提案被移除時,該功能失效。 userRef.child(jobid).remove()
也不觸發,減少對作業jobs/${jobid}
的提案子不發生。
exports.CountProposals = functions.database.ref("/proposals/{jobid}/{propid}").onWrite((event) => {
const jobid = event.params.jobid;
const userId = event.params.propid;
const isinvitation = event.data.child("isinvitation").val();
if (!isinvitation) {
const userRef = admin.database().ref(`users/${userId}/proposals/sent`);
if (event.data.exists() && !event.data.previous.exists()) {
userRef.child(jobid).set({
timestamp: admin.database.ServerValue.TIMESTAMP
});
} else if (!event.data.exists() && event.data.previous.exists()) {
userRef.child(jobid).remove();
}
}
const collectionRef = admin.database().ref(`/jobs/${jobid}`);
return collectionRef.once('value').then(snapshot => {
if (snapshot.val() !== null) {
const countRef = collectionRef.child("proposals");
countRef.transaction(current => {
if (event.data.exists() && !event.data.previous.exists()) {
return (current || 0) + 1;
} else if (!event.data.exists() && event.data.previous.exists()) {
return (current || 0) - 1;
}
});
}
});
});
控制檯日誌不顯示任何錯誤。
我正在處理event.data.child(「isinvitation」).val()的空值。對我來說,使用之前的值是沒有意義的。 –
我不清楚你的功能應該做什麼。你主要說的是它不是*做的。還要記住,你需要從一個可以工作的函數中返回一個承諾,比如更新數據庫。現在你沒有使用從更新(remove,transaction)返回的任何promise。 –
當新數據和isinvitation = false寫入或刪除數據庫'users/$ {userId}/proposals/sent'中的數據,然後增加或減少'/ jobs/$ {jobid}中的值提議時, –