Synchronizacja, asynchronizacja i deklaracje

Istotne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. Prawidłowo zatrzymując funkcje, unikniesz wysokich opłat za funkcje, które działają zbyt długo lub są zapętlone w nieskończoność. Możesz też zadbać o to, aby instancja Cloud Functions, w której działa Twoja funkcja, nie została wyłączona, zanim osiągnie warunek zakończenia lub stan jej zakończenia.

Skorzystaj z tych zalecanych metod zarządzania cyklem życia funkcji:

  • Znajdź funkcje wykonujące przetwarzanie asynchroniczne (nazywane też „funkcjami w tle”) przez zwrócenie obietnicy JavaScriptu.
  • Zakończ funkcje HTTP za pomocą res.redirect(), res.send() lub res.end().
  • zakończyć funkcję synchroniczną za pomocą instrukcji return;.

Uprość kod asynchroniczny dzięki obietnicom JavaScriptu

Obietnice to nowoczesna alternatywa dla wywołań zwrotnych dla kodu asynchronicznego. Obietnica reprezentuje operację i przyszłą wartość, którą może zwrócić. Umożliwia też propagowanie błędów w podobny sposób jak w kodzie synchronicznym. O obietnicach można przeczytać na blogu Firebase, a ogólnie w MDN.

Jak obietnice wpływają na funkcje

Gdy zwrócisz funkcji obietnicę JavaScriptu, będzie ona działać, dopóki nie zostanie zrealizowana lub odrzucona. Aby wskazać, że funkcja zakończyła swoje działanie, należy spełnić obietnicę skutków. Aby wskazać błąd, należy odrzucić obietnicę. Oznacza to, że musisz obsługiwać tylko odpowiednie błędy.

Ten kod pobiera fragment ref Bazy danych czasu rzeczywistego Firebase i ustawia jego wartość na "world!". Gdy zwrócisz wynik set, funkcja będzie działać, dopóki nie zakończy się asynchroniczna praca polegająca na zapisywaniu ciągu znaków w bazie 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 w Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków: