Ważne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. Jeśli zakończysz funkcje poprawnie, możesz uniknąć nadmiernych opłat z funkcji, które działają zbyt długo lub zapętlają się w nieskończoność. Możesz też sprawdzić, czy instancja Cloud Functions, która wykonuje funkcję, nie zostanie zamknięta, zanim funkcja nie osiągnie odpowiedniego stanu.
Skorzystaj z tych zalecanych metod, aby zarządzać cyklem życia funkcji:
- Rozwiązywanie funkcji, które wykonują przetwarzanie asynchroniczne (nazywane też „funkcjami tła”), zwracając obietnice JavaScriptu.
- Zakończ funkcje HTTP poleceniem
res.redirect()
,res.send()
lubres.end()
. - Zakończ synchroniczną funkcję za pomocą instrukcji
return;
.
Upraszczanie kodu asynchronicznego za pomocą obietnic JavaScript
Obietnice to nowoczesna alternatywa dla wywołań zwrotnych dla kodu asynchronicznego. Obietnica reprezentuje operację i wartość przyszłą, którą może zwrócić. Pozwala też rozpowszechniać błędy w sposób podobny do try/catch w kodzie synchronicznym. Możesz poczytać o obietnice w pakiecie SDK Firebase w Firebase Blog, i ogólnie obiecuje MDN.
W jaki sposób obietnice współdziałają z funkcjami
Gdy zwracasz obietnicę JavaScriptu do funkcji, ta funkcja działa, dopóki obietnica nie zostanie rozpatrzona lub odrzucona. Aby wskazać, że funkcja zakończyła działanie, należy rozwiązać obietnicę. Aby wskazać błąd, należy odrzucić obietnicę. Oznacza to, że wystarczy obsługi wybranych błędów.
Poniższy kod pobiera ref
Firebase Realtime Database i ustawia jego wartość na
"world!"
Zwracając wynik funkcji set
, masz gwarancję, że funkcja będzie działać do momentu zakończenia asynchronicznego zapisywania ciągu znaków do bazy danych:
// 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!');
});
});
Przykłady w kontekście
Większość kodu Cloud Functions Przykłady zawierać przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków:
- Baza danych czasu rzeczywistego wyzwalacz: funkcję HTTP, po której następuje przekierowanie;
- Cloud Storage
wyzwalacz:
Pobranie miejsca na dane, a następnie
then
- Webhook w BDB w trybie zapisu: błąd w klauzuli
then
- Okresowe usuwanie nieużywanych kont: A rejected promise