Synchronizacja, asynchroniczne i obietnice

Ważne jest zarządzanie cyklem życia funkcji, aby zapewnić jej prawidłowe działanie. Prawidłowe zamykanie funkcji pozwala uniknąć nadmiernych opłat za funkcje, które działają zbyt długo lub 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.

Aby zarządzać cyklem życia funkcji, stosuj te zalecane podejścia:

  • Rozwiązywanie funkcji, które wykonują przetwarzanie asynchroniczne (nazywane też „funkcjami tła”), zwracając obietnice JavaScriptu.
  • Zakończ funkcje HTTP za pomocą instrukcji res.redirect(), res.send() lub res.end().
  • Zakończ funkcję synchroniczną instrukcją 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ż propagować błędy podobne do tych w kodzie synchronicznym. Informacje o obietnicach w pakiecie SDK Firebase znajdziesz w blogu Firebase, a o ogólnych zasadach działania obietnic – w MDN.

Jak obietnice 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 działanie, należy rozwiązać obietnicę. Aby wskazać błąd, należy odrzucić obietnicę. Oznacza to, że musisz zareagować tylko na te błędy, które chcesz.

Podany niżej kod przyjmuje element Firebase Realtime Database ref i ustawia jego wartość na "world!". Zwracając wynik funkcji set, masz gwarancję, że będzie ona 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ść przykładów kodu Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka przykładów typowych przypadków: