簡體   English   中英

多個數據庫刪除,只有一個已注冊雲功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM