0

我有一個使用火力的應用,整個堆疊好看多了,功能,數據庫,存儲,身份驗證,消息,整個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」表,我需要刪除開始整個事件的事件。有誰知道這是怎麼做到的嗎?謝謝。

回答

0

實現這一目標的最簡單方法是通過調用由Admin SDK中 你可以通過事件得到參考notification_id提供的remove()功能,即event.params.notification_id然後將其刪除時,需要與admin.database().ref('pass in the path').remove();,你是好走。

3

首先,使用.onCreate代替.onWrite。您只需要在每個孩子首次寫作時閱讀,這樣可以避免不良的副作用。有關可用觸發器的更多信息,請參閱文檔here

event.data.ref()持有事件發生的參考。您可以撥打remove()上,參照其刪除:

return event.data.ref().remove()

+0

如果我改變它交給的onCreate我還會使用相同的路徑,仍然有{} notification_id PARAM? –