2017-11-26 1 views
2

Ich möchte eine Firebase-Cloud-Funktion schreiben, die von einem Firestore-Write-Ereignis ausgelöst wird. Innerhalb der Funktion muss ich wissen, ob der Schreibvorgang tatsächlich eine Funktion zum Erstellen, Aktualisieren oder Löschen ist. Die Logik ist etwas anders, aber ich möchte nicht drei verschiedene Event-Handler kopieren und einfügen. Wie kann ich feststellen, um welchen Ereignistyp es sich handelt?Firestore + Cloud-Funktion: So erkennen Sie, ob es sich um ein Ereignis zum Erstellen, Aktualisieren oder Löschen handelt

Die Cloud-Dokumentation liest sich sehr verwirrend für mich.

Die Dokumentation für Ereignis besagt, dass im Falle von FireStore das Ereignis tatsächlich ein DeltaDocumentSnapshot ist.

https://firebase.google.com/docs/reference/functions/functions.Event

Die Dokumentation für DeltaDocumentSnapshot schlägt vor, dass die Klasse keine Informationen über das Ereignis selbst hat (zB Anzeige von erstellen, aktualisieren oder löschen), aber nur das Zieldokument:

https://firebase.google.com/docs/reference/functions/functions.firestore.DeltaDocumentSnapshot

Ich habe Beispiele gefunden, bei denen der Autor das Erstellen/Aktualisieren/Löschen abzuleiten scheint, indem er überprüft, ob das aktuelle oder vorherige Dokument existiert. Ich habe das versucht, aber ich bekomme einen Fehler.

https://github.com/firebase/functions-samples/blob/master/child-count/functions/index.js#L30

Hier ist, was ich versucht habe:

exports.updateLikeCount = functions.firestore 
.document('likes/{likeId}').onWrite((event) => { 
    if (event.data.data().exists()) { 
     // Looks like the document still exists. It must be an update or create. 
    } 

    if (event.data.previous.data().exists()) { 
     // Looks like the document existed before. It must be an update or delete. 
    } 

Dieser Code schlägt mit diesem Fehler:

TypeError: event.data.exists is not a function 
+0

Der Code, den Sie verknüpfen vom 'Kind-count' verwendet' event.data.exists() '. Sie haben dort ein zusätzliches 'data()' hinzugefügt, was nicht funktioniert. –

Antwort

1

ich ein paar verschiedene Dinge ausprobiert habe. Die folgende Version scheint zu funktionieren, aber ich weiß nicht, ob sie korrekt ist.

var exists = event.data.exists;` 
var hasExisted = (event.data.previous != null) && event.data.previous.exists; 
var isCreate = (exists && !hasExisted); 
var isDelete = (!exists && hasExisted); 
Verwandte Themen