Zarządzanie cyklem życia funkcji jest ważne, 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ż mieć pewność że instancja Cloud Functions na której działa funkcja, nie zostanie wyłączona zanim funkcja nie osiągnie stanu lub warunku zakończenia.
Aby zarządzać cyklem życia funkcji, stosuj te zalecane metody:
- Zakończ funkcje, które wykonują asynchroniczne przetwarzanie (znane też jako „funkcje działające w tle”), zwracając obietnicę JavaScriptu.
- Zakończ funkcje HTTP za pomocą
res.redirect(),res.send()lubres.end(). - Zakończ synchroniczną funkcję za pomocą instrukcji
return;.
Uproszczenie kodu asynchronicznego za pomocą obietnic JavaScriptu
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 podobnie jak w przypadku try/catch w kodzie synchronicznym. Więcej informacji o obietnicach w pakiecie SDK Firebase znajdziesz na blogu Firebase, a o obietnicach w ogóle – w MDN.
Jak obietnice działają z funkcjami
Gdy zwracasz obietnicę JavaScriptu do funkcji, ta funkcja działa, dopóki obietnica nie zostanie spełniona lub odrzucona. Aby wskazać, że funkcja zakończyła działanie, obietnica powinna zostać spełniona. 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!". Dzięki zwróceniu wyniku set masz pewność, że funkcja będzie działać, dopóki asynchroniczna praca polegająca na zapisaniu ciągu znaków w bazie danych nie zostanie w pełni 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ść naszych Cloud Functions przykładowych kodów Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów, które pokazują typowe przypadki:
- Wywołanie bazy danych czasu rzeczywistego trigger: funkcja HTTP, po której następuje przekierowanie
- Wywołanie Cloud Storage: pobieranie z pamięci, po którym następuje
then - Webhook przy zapisie w bazie danych czasu rzeczywistego:
błąd zgłoszony w klauzuli
then - Okresowe usuwanie nieużywanych kont: odrzucona obietnica