Synchronisiert, asynchron und verspricht

Es ist wichtig, den Lebenszyklus einer Funktion zu verwalten, damit sie richtig aufgelöst wird. Durch das ordnungsgemäße Beenden von Funktionen können Sie übermäßige Gebühren vermeiden von Funktionen stammen, die zu lange laufen oder sich endlos wiederholen. Außerdem können Sie dafür sorgen, dass die Cloud Functions-Instanz, in der Ihre Funktion ausgeführt wird, nicht heruntergefahren wird, bevor die Funktion die Beendigungsbedingung oder den Beendigungsstatus erreicht hat.

Verwenden Sie die folgenden empfohlenen Ansätze, um den Lebenszyklus Ihrer Funktionen zu verwalten:

  • Funktionen, die eine asynchrone Verarbeitung (auch als „Hintergrundfunktionen“ bezeichnet) ausführen, können durch Rückgabe eines JavaScript-Versprechens aufgelöst werden.
  • Beenden Sie HTTP-Funktionen mit res.redirect(), res.send() oder res.end()
  • Beenden Sie eine synchrone Funktion mit einer return;-Anweisung.

Asynchronen Code mit JavaScript-Promises vereinfachen

Versprechen sind eine moderne Alternative zu Callbacks für asynchronen Code. Ein Versprechen stellt einen Vorgang und den zukünftigen Wert dar, der zurückgegeben werden kann. Außerdem können Sie Fehler ähnlich wie bei try/catch in synchronem Code weitergeben. Informationen zu Versprechen im Firebase SDK finden Sie im Firebase-Blog und allgemeine Informationen zu Versprechen auf der MDN.

Funktionsweise von Versprechen mit Funktionen

Wenn Sie einer Funktion ein JavaScript-Versprechen zurückgeben, wird diese Funktion so lange ausgeführt, bis das Versprechen erfüllt oder abgelehnt wird. Um anzugeben, dass eine Funktion ihre Arbeit erfolgreich abgeschlossen hat, sollte das Versprechen aufgelöst werden. Um einen Fehler anzuzeigen, sollte das Versprechen abgelehnt werden. Das bedeutet, dass Sie nur die Sie beheben möchten.

Im folgenden Code wird ein Firebase Realtime Database ref verwendet und sein Wert auf "world!" festgelegt. Wenn Sie das Ergebnis von set zurückgeben, wird Ihre Funktion garantiert so lange ausgeführt, bis die asynchrone Arbeit zum Schreiben des Strings in die Datenbank vollständig abgeschlossen ist:

// Always change the value of "/hello" to "world!"
exports.hello = functions.database.ref('/hello').onWrite(event => {
  // set() returns a promise. We keep the function alive by returning it.
  return event.data.ref.set('world!').then(() => {
    console.log('Write succeeded!');
  });
});

Beispiele im Kontext

Der größte Teil unseres Cloud Functions-Codes Beispiele Beispiele für ordnungsgemäße Funktionsbeendigung. Hier einige Beispiele, typische Fälle: