Synchronizacja, asynchronizacja i deklaracje

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() lub res.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: