Trzeba zarządzać cyklem życia funkcji, aby dopilnować, że zostanie ona zakończona bez obaw. Jeśli zakończysz funkcje poprawnie, możesz uniknąć nadmiernych opłat z funkcji, które działają zbyt długo lub zapętlają się w nieskończoność. Możesz również upewnić się, że instancja Cloud Functions, na której działa Twoja funkcja, nie zostanie wyłączona , zanim funkcja osiągnie stan lub stan zakończenia.
Skorzystaj z tych zalecanych metod, aby zarządzać cyklem życia funkcji:
- Rozwiąż problemy z funkcjami, które wykonują asynchroniczne przetwarzanie (nazywane też „funkcjami w tle”), zwracając parametr JavaScript obietnicę.
- Zakończ funkcje HTTP ciągiem
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. Obietnica reprezentuje operację i wartość przyszłą, którą może zwrócić. Pozwala też propagowanie błędów podobnych do metody try/catch w kodzie synchronicznym. Możesz poczytać o obietnice w pakiecie SDK Firebase w Firebase Blog, i ogólnie obiecuje MDN.
W jaki sposób obietnice współdziałają z funkcjami
Gdy zwracasz obietnicę JavaScriptu do funkcji, ta funkcja działa, dopóki obietnica nie zostanie rozpatrzona lub odrzucona. Aby wskazać, że funkcja zakończyła swoje zadanie, obietnica powinna być zrealizowana. Do wskaż błąd, obietnica powinna zostać odrzucona. Oznacza to, że wystarczy obsługi wybranych błędów.
Poniższy kod pobiera ref
Firebase Realtime Database i ustawia jego wartość na
"world!"
Jeśli zwrócisz wynik funkcji set
, funkcja będzie miała pewność,
nie przerywaj do momentu asynchronicznego zapisywania ciągu znaków w bazie danych
została ukoń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ść kodu Cloud Functions Przykłady zawierać przykłady prawidłowego zakończenia funkcji. Oto kilka z nich, które pokazują, typowe przypadki:
- Baza danych czasu rzeczywistego wyzwalacz: funkcję HTTP, po której następuje przekierowanie;
- Cloud Storage
wyzwalacz:
Pobranie miejsca na dane, a następnie
then
- Webhook w bazie danych czasu rzeczywistego
zapis:
Błąd w klauzuli
then
- Okresowo usuwaj nieużywane kont: Odrzucona obietnica