2017-11-17 5 views
0

Ich bekomme diesen Fehler in der Cloud Firestore Function Protokollansicht.
Ich bin neu in JavaScript und Firestor und einige Ratschläge zu diesemWarum erhalte ich den Fehler in der Cloud Firestore-Funktion?

TypeError: event.data.previous.data is not a function at exports.onVisitorPres...

exports.onVisitorPresenceWrite = functions.database 
    .ref("/VISITORS_PRESENCE/{uid1}/{uid2}").onWrite((event) => { 
     // Get the data written or deleted on the Realtime Database 
     var eventStatus = event.data.val(); 
     const previousData = event.data.previous.data(); 
     // If the onWrite event is a delete event then use previousData 
     if(eventStatus == null){ 
      eventStatus = previousData; 
     } 
    }); 

Was ich tun möchte, ist mit den .onWrite((event) auf einem Firebase Realtime DATABAS Schlüssel und Firestor Funktion Trigger verwenden könnte, wenn die wichtigsten Elemente gelöscht werden und wenn neue Elemente hinzugefügt werden. Ich dachte, ich könnte die eventStatus == null überprüfen und das ist, wenn Daten gelöscht ich einfach die PreviousData verwenden (bevor es löschen bekam ??)

+1

Ich glaube, Sie verwirren/mischen [Firestore] (https://firebase.google.com/docs/functions/firestore-events) und [Echtzeitdatenbank] (https://firebase.google.com/docs/functions/database-events) triggert hier - Ihr Codebeispiel ist für die Realtime-Datenbank, aber die Frage erwähnt auch Firestore (und ist dafür markiert). – Grimthorr

Antwort

3

Das event Variable ist eine Instanz Event und deshalb event.data Aufruf wird ein DeltaDocumentSnapshot für Firestor zurückkehren und DeltaSnapshot für die Echtzeitdatenbank.

Mit einem diesem Delta Snapshots können Sie den vorherigen Wert mit previous erhalten, die einem anderen DeltaDocumentSnapshot oder DeltaSnapshot mit dem vorherigen Zustand aus der Zeit vor dem Schreibereignis ausgelöst wurde zurück.

In Ihrem Beispiel sind Sie mit einem Datenbank-Trigger Firebase Realtime, was bedeutet, event.data.previous ein DeltaSnapshot zurück, die nicht data() nicht unterstützt, sondern unterstützen stattdessen val().

In diesem Fall, wie Sie mit var eventStatus = event.data.val(); getan haben, Sie val() auf previous aufrufen müssen:

const previousData = event.data.previous.val(); 

Wenn Sie stattdessen versuchen, eine Firestore-Trigger zu verwenden, müssen Sie dies ändern:

functions.database.ref("[...]") 

Um dies:

functions.firestore.document("[...]") 

Und dann können Sie event.data.previous.data() verwenden.

+0

Seltsam das Wort "val()" ist nicht auf dieser Seite erwähnt [Funktionen Firestore-Ereignisse] (https://firebase.google.com/docs/functions/firestore-events) – Erik

+1

Eigentlich sehe ich, was passiert ist, Ihr Beispiel ist Weitere Informationen zu [Firebase Realtime Database onWrite-Trigger] (https://firebase.google.com/docs/functions/database-events) finden Sie in meiner bearbeiteten Antwort. – Grimthorr

+0

Thansk Grimthorr ja du hast recht ok gerade erst angefangen das zu lernen :) – Erik

Verwandte Themen