1

Ich habe die folgende Cloud-Funktion, die sehr gut funktioniert. Es wartet auf ein Update in der Echtzeitdatenbank und aktualisiert Firestore entsprechend.Unbehandelte Ablehnung in Google Cloud-Funktionen

Alles ist in Ordnung, außer wenn mein Benutzer noch nicht meine Firestore-Datenbank existiert.

Hier, wo ich mit Unhandled rejection umgehen muss, sehe ich im Google Cloud Functions-Protokoll.

So siehe unten, in der verkürzten Version der Funktion, für meine db.collection("users").where("email", "==", email).get(), wie Sie die Funktion stoppen, um vorwärts zu bewegen und den Absturz zu verhindern.

exports.updateActivities = functions.database.ref("delegates/{userId}/activities").onWrite((event) => { 
    //Here I set all the needed variable 
    return rtdb.ref(`delegates/${userId}/email`).once("value", snapshot => { 
      //Here I'm fine, email is always present. 
     }) 
     .then(() => { 
      db.collection("users").where("email", "==", email).get() 

       //This is where I need to handle when there is not matching value, to stop moving forward. 

       .then(querySnapshot => { 
        querySnapshot.forEach(val => { 
         console.log("Found match in FireStore " + val.id); 
         firestoreId = val.id; 
        }) 
       }) 
       .then(() => { 
        //Here I start my update on Firestore 
       }); 
     }) 
}); 

Antwort

1

sollten Sie catch() auf jedem Versprechen, die Sie von Ihrer Funktion zurück, die abgelehnt werden könnte. Dies teilt Cloud Functions mit, dass Sie den Fehler behandelt haben. Die von catch() zurückgegebene Zusage wird gelöst.

Normalerweise melden Sie den Fehler von catch(), so können Sie es in den Konsolenprotokollen finden Sie unter:

return somePromise 
.then(() => { /* do your stuff */ } 
.catch(error => { console.error(error) }) 
+0

Danke, so mit dem '.catch (error => {console.error (Fehler); return }) 'Ich stoppe auch die Funktion, um fortzufahren, oder die' Rückkehr' ist hier optional? – Benoit

+1

Sie sollten * immer * eine Zusage von einer Funktion zurückgeben, die asynchrone Arbeit ausführt. –

Verwandte Themen