Catch up on everthing we announced at this year's Firebase Summit. Learn more

Synchronisieren, asynchron und Versprechen

Es ist wichtig, den Lebenszyklus einer Funktion zu verwalten, um sicherzustellen, dass sie ordnungsgemäß aufgelöst wird. Durch das korrekte Beenden von Funktionen können Sie übermäßige Gebühren von Funktionen vermeiden, die zu lange ausgeführt werden oder sich endlos wiederholen. Außerdem können Sie sicherstellen, dass die Cloud Functions-Instanz, auf der Ihre Funktion ausgeführt wird, nicht heruntergefahren wird, bevor Ihre Funktion ihren Beendigungszustand oder -status erfolgreich erreicht hat.

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

  • Resolve Funktionen , die asynchrone Verarbeitung durchführt (auch als „Hintergrundfunktionen“ bekannt) , indem ein zurückkehr JavaScript Versprechen .
  • Terminate HTTP - Funktionen mit res.redirect() , res.send() oder res.end() .
  • Terminate eine synchrone Funktion mit einer return; Stellungnahme.

Vereinfachen Sie asynchronen Code mit JavaScript-Versprechen

Promises sind eine moderne Alternative zu Callbacks für asynchronen Code. Ein Promise stellt eine Operation und den zukünftigen Wert dar, den sie zurückgeben kann. Außerdem können Sie Fehler ähnlich wie try/catch in synchronem Code weitergeben. Sie können über Versprechungen im Firebase SDK auf lesen The Firebase Blog , und verspricht im Allgemeinen auf MDN .

Wie Versprechen mit Funktionen funktionieren

Wenn Sie eine JavaScript-Zusage an eine Funktion zurückgeben, wird diese Funktion so lange ausgeführt, bis die Zusage aufgelöst oder abgelehnt wird. Um anzuzeigen, dass eine Funktion ihre Arbeit erfolgreich abgeschlossen hat, sollte das Promise aufgelöst werden. Um auf einen Fehler hinzuweisen, sollte die Zusage abgelehnt werden. Das bedeutet, dass Sie nur Fehler behandeln müssen, die Sie möchten.

Der folgende Code nimmt eine Datenbank Firebase Realtime ref und setzt den Wert auf "world!" . Durch die Rückgabe des Ergebnisses des set wird Ihre Funktion am Laufen zu halten garantiert , bis die asynchrone Arbeit der Zeichenfolge 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

Die meisten unserer Cloud - Funktionen Code - Beispiele sind Beispiele für eine einwandfreie Funktion Terminierung. Hier sind einige, die typische Fälle veranschaulichen: