Ważne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. Prawidłowe kończenie funkcji pozwala uniknąć nadmiernych opłat za funkcje, które działają zbyt długo lub w nieskończonej pętli. Możesz też zadbać o to, aby Cloud Functionsinstancja, na której działa funkcja, nie została zamkniętaCloud Functions, zanim funkcja osiągnie warunek lub stan zakończenia.
Aby zarządzać cyklem życia funkcji, skorzystaj z tych zalecanych metod:
- Funkcje, które wykonują asynchroniczne przetwarzanie (nazywane też „funkcjami w tle”), należy rozwiązywać, zwracając obietnicę JavaScriptu.
- Zakończ funkcje HTTP za pomocą
res.redirect()
,res.send()
lubres.end()
. - Zakończ synchroniczną funkcję instrukcją
return;
.
Uprość kod asynchroniczny za pomocą obietnic JavaScript
Obietnice to nowoczesna alternatywa dla wywołań zwrotnych w przypadku kodu asynchronicznego. Obietnica reprezentuje operację i przyszłą wartość, którą może zwrócić. Umożliwia też propagowanie błędów podobnych do try/catch w kodzie synchronicznym. Więcej informacji o obietnicach w pakiecie Firebase SDK znajdziesz na blogu Firebase, a o obietnicach w ogóle – na stronie MDN.
Jak obietnice działają w przypadku funkcji
Gdy zwracasz obietnicę JavaScriptu do funkcji, ta funkcja działa dalej, dopóki obietnica nie zostanie spełniona lub odrzucona. Aby wskazać, że funkcja zakończyła działanie, należy rozwiązać obietnicę. Aby wskazać błąd, obietnica powinna zostać odrzucona. Oznacza to, że musisz obsługiwać tylko te błędy, które chcesz.
Poniższy kod pobiera Firebase Realtime Database ref
i ustawia jego wartość na "world!"
. Zwracając wynik set
, masz pewność, że funkcja będzie działać do momentu zakończenia asynchronicznego zapisu ciągu tekstowego w bazie 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ść naszych Cloud Functions przykładowych kodów zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków:
- Wywoływanie bazy danych czasu rzeczywistego: funkcja HTTP, po której następuje przekierowanie.
- Wywoływanie Cloud Storage:
Pobieranie z pamięci, po którym następuje
then
- Webhook w bazie danych czasu rzeczywistego
write:
Błąd zgłoszony w klauzuli
then
- Okresowe usuwanie nieużywanych kont: odrzucona obietnica