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 Belastungen durch zu lange oder endlos laufende Funktionen vermeiden. 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 ihre Beendigungsbedingung oder ihren Beendigungszustand erreicht hat.
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-Promise zurückgeben.
- Beenden Sie HTTP-Funktionen mit
res.redirect()
,res.send()
oderres.end()
. - Beenden Sie eine synchrone Funktion mit einem
return;
Stellungnahme.
Vereinfachen Sie asynchronen Code mit JavaScript-Versprechen
Promises sind eine moderne Alternative zu Callbacks für asynchronen Code. Ein Versprechen repräsentiert eine Operation und den zukünftigen Wert, den sie zurückgeben kann. Außerdem können Sie Fehler ähnlich wie try/catch in synchronem Code propagieren. Informationen zu Zusagen im Firebase SDK finden Sie im Firebase-Blog und zu Zusagen im Allgemeinen auf MDN .
Wie Promises mit Funktionen funktionieren
Wenn Sie eine JavaScript-Zusage an eine Funktion zurückgeben, wird diese Funktion weiter 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 einen Fehler anzuzeigen, sollte das Promise zurückgewiesen werden. Dies bedeutet, dass Sie nur Fehler behandeln müssen, die Sie möchten.
Der folgende Code verwendet 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 demonstrieren:
- Echtzeit-Datenbank-Trigger : eine HTTP-Funktion, gefolgt von einer Umleitung
- Cloud-Speicherauslöser : Ein Speicherdownload, gefolgt von
then
- Webhook on Realtime Database write : Ein Fehler, der in eine
then
Klausel geworfen wird - Ungenutzte Accounts regelmäßig löschen : Ein abgelehntes Versprechen