Synchronisieren, asynchronisieren und Versprechen

Es ist wichtig, den Lebenszyklus einer Funktion zu verwalten, um sicherzustellen, dass sie ordnungsgemäß aufgelöst wird. Durch die korrekte Beendigung von Funktionen können Sie übermäßige Kosten durch Funktionen vermeiden, die zu lange laufen oder sich in einer Endlosschleife befinden. Außerdem können Sie sicherstellen, dass die Cloud Functions-Instanz, auf der Ihre Funktion ausgeführt wird, nicht heruntergefahren wird, bevor Ihre Funktion erfolgreich ihren Beendigungszustand oder -status erreicht.

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

  • Lösen Sie Funktionen auf, die eine asynchrone Verarbeitung durchführen (auch als „Hintergrundfunktionen“ bezeichnet), indem Sie ein JavaScript-Versprechen zurückgeben.
  • Beenden Sie HTTP-Funktionen mit res.redirect() , res.send() oder res.end() .
  • Beenden Sie eine synchrone Funktion mit einem return; Stellungnahme.

Vereinfachen Sie asynchronen Code mit JavaScript-Versprechen

Versprechen sind eine moderne Alternative zu Rückrufen für asynchronen Code. Ein Versprechen repräsentiert eine Operation und den zukünftigen Wert, den sie möglicherweise zurückgibt. Außerdem können Sie damit Fehler ähnlich wie bei Try/Catch in synchronem Code verbreiten. Sie können mehr über Versprechen im Firebase SDK im Firebase-Blog und über Versprechen im Allgemeinen auf MDN lesen.

Wie Versprechen mit Funktionen funktionieren

Wenn Sie ein JavaScript-Versprechen an eine Funktion zurückgeben, wird diese Funktion so lange ausgeführt, bis das Versprechen aufgelöst oder abgelehnt wird. Um anzuzeigen, 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 Fehler behandeln müssen, die Sie möchten.

Der folgende Code nimmt eine Firebase Realtime Database- ref und setzt ihren Wert auf "world!" . Durch die Rückgabe des Ergebnisses von set wird Ihre Funktion garantiert weiter ausgeführt, bis die asynchrone Arbeit des Schreibens 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 Functions- Codebeispiele enthalten Beispiele für die ordnungsgemäße Funktionsbeendigung. Hier sind einige, die typische Fälle veranschaulichen: