Ważne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. Prawidłowe zamykanie funkcji pozwala uniknąć nadmiernych opłat za funkcje, które działają zbyt długo lub 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.
Aby zarządzać cyklem życia funkcji, stosuj te zalecane podejścia:
- Rozwiązywanie funkcji, które wykonują przetwarzanie asynchroniczne (nazywane też „funkcjami tła”), zwracając obietnice JavaScriptu.
- Zakończ funkcje HTTP za pomocą instrukcji
res.redirect()
,res.send()
lubres.end()
. - Zakończ funkcję synchroniczną instrukcją
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ż propagować błędy podobne do tych w kodzie synchronicznym. Informacje o obietnicach w pakiecie SDK Firebase znajdziesz w blogu Firebase, a o ogólnych zasadach działania obietnic – w MDN.
Jak obietnice działają z funkcjami
Gdy zwrócisz obietnicę JavaScriptu do funkcji, będzie ona działać, dopóki obietnica nie zostanie zrealizowana 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 musisz zareagować tylko na te błędy, które chcesz.
Podany niżej kod przyjmuje element Firebase Realtime Database ref
i ustawia jego wartość na "world!"
. Zwracając wynik funkcji set
, masz gwarancję, że będzie ona 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ść przykładów kodu Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków:
- Aktywator Bazy danych czasu rzeczywistego: funkcja HTTP, po której następuje przekierowanie
- Cloud Storage
wyzwalacz:
Pobieranie danych z Cloud Storage, a następnie
then
- Webhook w BDB w trybie zapisu: błąd w klauzuli
then
- Okresowe usuwanie nieużywanych kont: A rejected promise