Ważne jest, aby zarządzać cyklem życia funkcji, aby mieć pewność, że zostanie ona poprawnie rozwiązana. Prawidłowe kończenie funkcji pozwala uniknąć nadmiernych opłat spowodowanych funkcjami, które działają zbyt długo lub działają w nieskończonej pętli. Możesz także upewnić się, że instancja Cloud Functions, w której działa Twoja funkcja, nie zostanie zamknięta, zanim funkcja pomyślnie osiągnie warunek lub stan zakończenia.
Skorzystaj z tych zalecanych podejść, aby zarządzać cyklem życia swoich funkcji:
- Rozwiąż funkcje, które wykonują przetwarzanie asynchroniczne (znane również jako „funkcje w tle”), zwracając obietnicę JavaScript .
- Zakończ funkcje HTTP za pomocą
res.redirect()
,res.send()
lubres.end()
. - Zakończ funkcję synchroniczną
return;
oświadczenie.
Uprość kod asynchroniczny dzięki obietnicom JavaScript
Obietnice są nowoczesną alternatywą dla wywołań zwrotnych dla kodu asynchronicznego. Obietnica reprezentuje operację i przyszłą wartość, jaką może zwrócić. Pozwala także propagować błędy podobne do try/catch w kodzie synchronicznym. O obietnicach pakietu Firebase SDK możesz przeczytać na blogu Firebase i ogólnie o obietnicach na MDN .
Jak obietnice współpracują z funkcjami
Kiedy zwrócisz obietnicę JavaScript do funkcji, funkcja ta będzie działać do momentu rozwiązania lub odrzucenia obietnicy. Aby wskazać, że funkcja pomyślnie zakończyła swoją pracę, należy rozpatrzyć obietnicę. Aby wskazać błąd, obietnicę należy odrzucić. Oznacza to, że musisz obsługiwać tylko te błędy, które chcesz.
Poniższy kod pobiera ref
danych Firebase Realtime Database i ustawia jej wartość na "world!"
. Zwracając wynik set
, masz pewność, że funkcja będzie działać do momentu całkowitego zakończenia asynchronicznego zapisu 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ść naszych przykładów kodu Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków:
- Wyzwalacz bazy danych czasu rzeczywistego : funkcja HTTP, po której następuje przekierowanie
- Wyzwalacz Cloud Storage : pobranie miejsca, a
then
pobranie - Webhook przy zapisie w bazie danych czasu rzeczywistego : błąd zgłoszony w klauzuli
then
- Okresowo usuwaj nieużywane konta : odrzucona obietnica