我有一個使用火力的應用,整個堆疊好看多了,功能,數據庫,存儲,身份驗證,消息,整個9我想保持客戶端非常輕巧。因此,如果用戶對帖子發表評論並「標記」了其他用戶,那麼使用典型的「@username」風格標記,我將所有繁重的工作都轉移到了firebase功能上。這樣客戶端就不必根據用戶名來計算用戶ID,並且執行其他操作。這是設置使用觸發器,所以當出現上述情況發生了,我寫的名爲「create_notifications」有一些數據的「表」像刪除計算之後到來的寫事件火力功能
{
type: "comment",
post_id: postID,
from: user.getUid(),
comment_id: newCommentKey,
to: taggedUser
}
凡taggedUser是用戶名,帖子ID是活動後,該newCommentKey從註釋數據庫引用的.push()中檢索,user.getUid()來自firebase auth類。
現在在我的火力功能,我必須爲獲取所有的相關信息,併發出通知後的所有相關細節的海報特定表「onWrite」觸發。所有這些都是完整的,我想弄清楚的是......如何刪除傳入的事件,這樣我就不需要任何類型的cron作業來清除此表。我可以抓住的情況下,做我所需要的計算和數據收集,發送消息,然後刪除傳入的事件,因此它永遠不會在除了時間的少量花了收集數據的數據庫,即使真的存在。
的火力功能的簡化樣本觸發是...
exports.createNotification = functions.database.ref("/create_notifications/{notification_id}").onWrite(event => {
const from = event.data.val().from;
const toName = event.data.val().to;
const notificationType = event.data.val().type;
const post_id = event.data.val().post_id;
var comment_id, commentReference;
if(notificationType == "comment") {
comment_id = event.data.val().comment_id;
}
const toUser = admin.database().ref(`users`).orderByChild("username").equalTo(toName).once('value');
const fromUser = admin.database().ref(`/users/${from}`).once('value');
const referencePost = admin.database().ref(`posts/${post_id}`).once('value');
return Promise.all([toUser, fromUser, referencePost]).then(results => {
const toUserRef = results[0];
const fromUserRef = results[1];
const postRef = results[2];
var newNotification = {
type: notificationType,
post_id: post_id,
from: from,
sent: false,
create_on: Date.now()
}
if(notificationType == "comment") {
newNotification.comment_id = comment_id;
}
return admin.database().ref(`/user_notifications/${toUserRef.key}`).push().set(newNotification).then(() => {
//NEED TO DELETE THE INCOMING "event" HERE TO KEEP DB CLEAN
});
})
}
所以在它的最終「迴歸」這個函數,它後完成數據寫入到「/ user_notifications」表,我需要刪除開始整個事件的事件。有誰知道這是怎麼做到的嗎?謝謝。
如果我改變它交給的onCreate我還會使用相同的路徑,仍然有{} notification_id PARAM? –