Istotne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. Prawidłowo zakończysz funkcje, unikniesz nadmiernych opłat związanych z funkcjami, które działają zbyt długo lub zapętlają się w nieskończoność. Możesz też mieć pewność, że instancja Cloud Functions, w której działa Twoja funkcja, nie zostanie wyłączona, zanim funkcja osiągnie stan lub warunek zakończenia.
Skorzystaj z tych zalecanych metod, aby zarządzać cyklem życia funkcji:
- Rozwiąż zadania, które wykonują asynchroniczne przetwarzanie (nazywane też „funkcjami w tle”), zwracając obietnicę JavaScriptu.
- Zakończ funkcje HTTP za pomocą
res.redirect()
,res.send()
lubres.end()
. - Zakończ funkcję synchroniczną instrukcją
return;
.
Uprość kod asynchroniczny za pomocą obietnic JavaScriptu
Obietnice to nowoczesna alternatywa dla wywołań zwrotnych dla kodu asynchronicznego. Obiecuje reprezentuje operację i wartość przyszłą, którą może zwrócić. Pozwala też propagować błędy podobne do tych w kodzie synchronicznym. Więcej informacji o obietnicach zawartych w pakiecie SDK Firebase znajdziesz na blogu Firebase, a ogólnie na temat obietnic w MDN.
W jaki sposób obietnice współ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 swoje zadanie, należy zrealizować obietnicę. Aby wskazać błąd, należy odrzucić obietnicę. Oznacza to, że musisz zareagować tylko na te błędy, które chcesz.
Poniższy kod pobiera ref
w Bazie danych czasu rzeczywistego Firebase i ustawia jego wartość na "world!"
. Po zwróceniu wyniku funkcji set
funkcja będzie działać, dopóki asynchroniczna operacja zapisu ciągu w bazie danych nie zostanie całkowicie zakończona:
// 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ładowych kodów w Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka, które pokazują typowe przypadki:
- Aktywator Bazy danych czasu rzeczywistego: funkcja HTTP, po której następuje przekierowanie
- Aktywator Cloud Storage: pobranie miejsca na dane, a następnie
then
- Webhook przy zapisie w bazie danych czasu rzeczywistego: błąd zgłoszony w klauzuli
then
. - Okresowo usuwaj nieużywane konta: odrzucona obietnica