2017-05-10 2 views
0

Ich versuche, eine Funktion für meine Datenbank mit Cloud-Funktionen für Firebase zu erstellen. Der Zweck der Funktion ist das Abhören von Ereignissen in der attend Tabelle und basierend auf dem Objekt, das zum Identifizieren des Ereignisses geschrieben wurde, und das Inkrementieren des usersAttending des Ereignisobjekts.Inkrementelle Operation mit Cloud-Funktionen für Firebase

Das ist meine Funktion bisher.

//listens to write on attendObjects (when a user is attending an event), and increments attending users for event 
exports.listenAttendingEvents = functions.database.ref('/attend/{pushId}').onWrite(event => { 

//get attendObj -> parsed JSON by javascript interpreter 
const attentObj = event.data.val(); 
const attendId = attentObj['attendId']; 
const pathToAttendees = '/attends' + '/' + attendId; 

// Attach an asynchronous callback to read the data at our posts reference 
admin.database().ref(pathToAttendees).on("value", function(snapshot) { 
    console.log(snapshot.val()); 
    const obj = snapshot.val(); 
    var nrAttending = obj['attending']; 
     nrAttending = Number(snapshot.val()); 
     return admin.database().ref(pathToAttendees + '/attending').transaction(function (nrAttending) { 
      return (nrAttending || 0) + 1; 
     }); 
    }); 
}, function (errorObject) { 
    console.log("The read failed: " + errorObject.code); 
    return errorObject 
}); 

Die Probleme, wie es ist scheint, dass die event object abgerufen nicht erhalten. Die Funktion scheint vorher mit dem Status ok

+2

you'e kein Versprechen von Ihrem Top-Level-Funktion zurückkehrt, was bedeutet, Google Cloud-Funktionen sie töten können, während die asynchrone Datenbanktransaktion noch im Gange ist. Lesen Sie diese Seite in der Dokumentation für mehr: https://firebase.google.com/docs/functions/terminate-functions –

+0

@FrankvanPuffelen ... vielen Dank ... immer hilfreich :) – John

Antwort

0

abzuschließen Das Problem war, dass ich kein Versprechen für meine Top-Level-Funktion hatte. Dies führte dazu, dass Google Cloud Functions es vor dem Abschluss des Vorgangs löschte.

ein Versprechen Hinzufügen mein Problem gelöst

admin.database().ref(pathToAttendees).once("value").then(function(snapshot) {