2017-06-17 5 views
5

ich folgende Funktionen haben, die für einen Datenbank-Trigger wie so zu einem OnWrite Ereignis hört:Firebase: Prüfung auf ‚schreiben oder löschen‘ für OnWrite Events

exports.sendNotifications = functions.database.ref('/events/{eventId}/registered') 
     .onWrite(event => { 

      ... 
     }); 

Die obige Funktion aufgerufen wird, unabhängig davon, ob der Knoten gelöscht oder hinzugefügt. Wie überprüfe ich, ob das onWrite-Ereignis ein 'delete' -Ereignis für diesen bestimmten Knoten oder ein 'add' -Ereignis ist, so dass diese Funktion nur aufgerufen wird, wenn es ein 'add' -Ereignis ist.

Antwort

5

Die event, die in die Funktion übergeben wird, enthält sowohl die vorherigen Daten als auch die neuen Daten für den Standort, der die Funktion ausgelöst hat. Mit diesen beiden Informationen können Sie ableiten, ob es sich um ein neues Schreiben, ein Update oder ein Löschen handelte.

Vom Firebase documentation for database functions:

exports.makeUppercase = functions.database.ref('/messages/{pushId}/original') 
.onWrite(event => { 
    // Only edit data when it is first created. 
    if (event.data.previous.exists()) { 
    return; 
    } 
    // Exit when the data is deleted. 
    if (!event.data.exists()) { 
    return; 
    } 
+0

Stellen Sie sicher, dass Sie null von Firebase-Funktionen zurückgeben, wenn Sie keine Arbeit ausführen –

0

Wenn die Änderung Cloud Firestor, dann wird es sein:

// Only edit data when it is first created. 
    if (event.data.previous.exists) { 
    return; 
    } 
    // Exit when the data is deleted. 
    if (!event.data.exists) { 
    return; 
    } 
0

Nach dem folgenden Artikel zu lesen, das Hinzufügen eines weitere Überprüfung des Ereigniselement zu der if-then Aussage hat einige Vorteile: https://firebase.googleblog.com/2017/07/cloud-functions-realtime-database.html

exports.sendNotification = functions.database 
     .ref("/messages/{messageId}").onWrite(event => { 
    if (event.data.exists() && !event.data.previous.exists()) { 
     // This is a new message, not a change or a delete. 
     // Put code here 
    } 
}) 

Wenn das Lesen von der Datenbank fehlgeschlagen ist (möglicherweise ein Netzwerkfehler ???), dann wird event.data.previous.exists() falsch sein. Das Hinzufügen von event.data.exists() stellt sicher, dass das Ereigniselement tatsächlich über Daten verfügt, die Sie verwenden können.

Verwandte Themen