Es ist wichtig, den Lebenszyklus einer Funktion zu verwalten, damit sie ordnungsgemäß aufgelöst wird. Wenn Sie Funktionen richtig beenden, können Sie übermäßige Kosten durch Funktionen vermeiden, die zu lange laufen oder in einer Endlosschleife laufen. 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()
oderres.end()
. - Beenden Sie eine synchrone Funktion mit einer
return;
-Anweisung.
Asynchronen Code mit JavaScript-Promis vereinfachen
Versprechen sind eine moderne Alternative zu Callbacks für asynchronen Code. Ein Promise 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 findest du im Firebase-Blog. Versprechungen im Allgemeinen findest du auf MDN.
Funktionsweise von Promises mit Funktionen
Wenn du ein JavaScript-Promise an eine Funktion zurückgibt, wird diese Funktion so lange ausgeführt, bis das Promise aufgelöst oder abgelehnt wird. Um anzuzeigen, dass eine Funktion ihre Arbeit erfolgreich abgeschlossen hat, sollte das Promise aufgelöst werden. Um einen Fehler anzuzeigen, sollte das Versprechen abgelehnt werden. Das bedeutet, dass Sie nur Fehler behandeln müssen, die Sie behandeln 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
Die meisten unserer Cloud Functions Codebeispiele enthalten Beispiele für die korrekte Funktionsweise. Hier sind einige Beispiele für typische Fälle:
- Realtime Database-Trigger: eine HTTP-Funktion, gefolgt von einer Weiterleitung
- Cloud Storage-Trigger: Ein Speicherdownload gefolgt von
then
- Webhook beim Schreiben von Realtime Database: In einer
then
-Klausel wird ein Fehler ausgegeben. - Nicht verwendete Konten regelmäßig löschen: Ein abgelehntes Versprechen