[英]multiple database deletes, only one registered with a cloud function
我編寫了一個雲函數,該函數偵聽Firebase實時數據庫中的刪除。 如果只有一個刪除,則效果很好-控制台將該項顯示為已刪除。
但是,如果實時數據庫中同時存在多個刪除,則僅會為這些刪除之一觸發我的雲功能! 我究竟做錯了什么?
這是我的情況:在同一站點上打開兩個瀏覽器選項卡。 每次我在每個選項卡中連接到Web應用程序時,我都會通過push
創建一個實時數據庫條目和一個引用。 然后,我通過關閉瀏覽器窗口來關閉兩個選項卡,瀏覽器窗口在我的引用上調用onDelete
,從而通過remove
觸發在數據庫上remove
該引用,並且我可以確認兩者都已從數據庫中刪除。 但是,刪除中只有一個在我的雲功能中注冊。
雲功能
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.onPresenceRemove = functions.database.ref('/status/app').onDelete( (snapshot, context) => {
const original = snapshot.val();
console.error( 'snapshot', original, snapshot, context );
return true;
});
js實時數據庫代碼
presenceDoc = firebase.database().ref( '/status/app' );
firebase.database().ref( '.info/connected' ).on( 'value', function( snapshot ) {
if ( snapshot.val() === true ) {
presenceRef = presenceDoc.push( userId );
presenceRef.onDisconnect().remove();
}
});
您的雲端功能設置為在以下時間觸發:
functions.database.ref('/status/app').onDelete
因此,當/status/app
被刪除時(即,當其最后一個子節點被刪除時),您的函數將被刪除之前/status/app
下的最后一個數據的快照觸發。
您的客戶端代碼似乎正在/status/app
下添加新的子節點,其結構如下:
status
app
pushId1: userId1
pushId2: userId1
pushId3: userId2
僅當刪除/status/app
即刪除最后一個子節點時),才會觸發您的Cloud Function。
您可能希望在刪除每個孩子時觸發您的Cloud Function。 為此,觸發器應在樹中低一級:
functions.database.ref('/status/app/{pushId}').onDelete(...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.