Synchronizacja, asynchroniczne i obietnice

Ważne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. 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 też sprawdzić, czy instancja Cloud Functions, która wykonuje funkcję, nie zostanie zamknięta, zanim funkcja nie osiągnie odpowiedniego stanu.

Skorzystaj z tych zalecanych metod, aby zarządzać cyklem życia funkcji:

  • Rozwiązywanie funkcji, które wykonują przetwarzanie asynchroniczne (nazywane też „funkcjami tła”), zwracając obietnice JavaScriptu.
  • Zakończ funkcje HTTP poleceniem res.redirect(), res.send() lub res.end().
  • Zakończ synchroniczną funkcję za pomocą instrukcji return;.
.

Upraszczanie kodu asynchronicznego za pomocą obietnic JavaScript

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ż rozpowszechniać błędy w sposób podobny do 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 działanie, należy rozwiązać obietnicę. Aby wskazać błąd, należy odrzucić obietnicę. Oznacza to, że wystarczy obsługi wybranych błędów.

Poniższy kod pobiera ref Firebase Realtime Database i ustawia jego wartość na "world!" Zwracając wynik funkcji set, masz gwarancję, że funkcja będzie działać do momentu zakończenia asynchronicznego zapisywania ciągu znaków do bazy 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ść kodu Cloud Functions Przykłady zawierać przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków: