Synchronizacja, asynchroniczne i obietnice

Trzeba zarządzać cyklem życia funkcji, aby dopilnować, że zostanie ona zakończona bez obaw. 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 również upewnić się, że instancja Cloud Functions, w której działa Twoja funkcja, nie zostanie wyłączona; , zanim funkcja osiągnie stan lub stan zakończenia.

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

  • Rozwiąż problemy z funkcjami, które wykonują asynchroniczne przetwarzanie (nazywane też „funkcjami w tle”), zwracając parametr JavaScript obietnicę.
  • Zakończ funkcje HTTP ciągiem 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. Obietnica reprezentuje operację i wartość przyszłą, którą może zwrócić. Pozwala też propagowanie błędów podobnych do metody 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 swoje zadanie, obietnica powinna być zrealizowana. Do wskaż błąd, obietnica powinna zostać odrzucona. Oznacza to, że wystarczy obsługi wybranych błędów.

Poniższy kod pobiera ref w Bazie danych czasu rzeczywistego Firebase i ustawia jego wartość na "world!" Jeśli zwrócisz wynik funkcji set, funkcja będzie miała pewność, nie przerywaj do momentu asynchronicznego zapisywania ciągu znaków w bazie danych została ukoń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ść naszego kodu w Cloud Functions Przykłady zawierać przykłady prawidłowego zakończenia funkcji. Oto kilka z nich, które pokazują, typowe przypadki: