Ważne jest, aby zarządzać cyklem życia funkcji, aby zapewnić jej prawidłowe rozwiązanie. Prawidłowe zakończenie funkcji pozwala uniknąć nadmiernych opłat za funkcje, które działają zbyt długo lub zapętlają się w nieskończoność. Możesz też upewnić się, że instancja Cloud Functions, na której działa Twoja funkcja, nie zostanie zamknięta, zanim funkcja pomyślnie osiągnie warunek lub stan zakończenia.
Użyj tych zalecanych podejść do zarządzania cyklem życia 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ą z
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ść, którą może zwrócić. Pozwala także propagować błędy podobne do try/catch w kodzie synchronicznym. Możesz przeczytać o obietnicach w SDK Firebase na Blogu Firebase i ogólnie o obietnicach na MDN .
Jak obietnice działają z funkcjami
Gdy zwrócisz obietnicę JavaScript do funkcji, ta funkcja będzie działać, dopóki obietnica nie zostanie rozwiązana lub odrzucona. Aby wskazać, że funkcja pomyślnie zakończyła swoją pracę, obietnica powinna zostać rozwiązana. Aby wskazać błąd, przyrzeczenie należy odrzucić. Oznacza to, że musisz obsługiwać tylko te błędy, które chcesz.
Poniższy kod pobiera ref
Firebase Realtime Database i ustawia jej wartość na "world!"
. Zwracając wynik set
, Twoja funkcja ma gwarancję, że będzie działać, dopóki asynchroniczne zapisywanie ciągu znaków w bazie danych nie zostanie w pełni zakończone:
// 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, które pokazują typowe przypadki:
- Wyzwalacz bazy danych czasu rzeczywistego : funkcja HTTP, po której następuje przekierowanie
- Wyzwalacz Cloud Storage : Pobieranie magazynu, a
then
- Webhook podczas zapisu w bazie danych czasu rzeczywistego : błąd zgłoszony w klauzuli
then
- Okresowo usuwaj nieużywane konta : odrzucona obietnica