了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Synchronizacja, async i obietnice

Ważne jest, aby zarządzać cyklem życia funkcji, aby zapewnić jej prawidłowe rozwiązanie. Prawidłowe zakończenie funkcji pozwala uniknąć nadmiernych opłat za funkcje, które działają zbyt długo lub zapętlają się w nieskończoność. Możesz też upewnić się, że instancja Cloud Functions, na której działa Twoja funkcja, nie zostanie zamknięta, zanim funkcja pomyślnie osiągnie warunek lub stan zakończenia.

Użyj tych zalecanych podejść do zarządzania cyklem życia funkcji:

  • Rozwiąż funkcje, które wykonują przetwarzanie asynchroniczne (znane również jako „funkcje w tle”), zwracając obietnicę JavaScript .
  • Zakończ funkcje HTTP za pomocą res.redirect() , res.send() lub res.end() .
  • Zakończ funkcję synchroniczną z return; oświadczenie.

Uprość kod asynchroniczny dzięki obietnicom JavaScript

Obietnice są nowoczesną alternatywą dla wywołań zwrotnych dla kodu asynchronicznego. Obietnica reprezentuje operację i przyszłą wartość, którą może zwrócić. Pozwala także propagować błędy podobne do try/catch w kodzie synchronicznym. Możesz przeczytać o obietnicach w SDK Firebase na Blogu Firebase i ogólnie o obietnicach na MDN .

Jak obietnice działają z funkcjami

Gdy zwrócisz obietnicę JavaScript do funkcji, ta funkcja będzie działać, dopóki obietnica nie zostanie rozwiązana lub odrzucona. Aby wskazać, że funkcja pomyślnie zakończyła swoją pracę, obietnica powinna zostać rozwiązana. Aby wskazać błąd, przyrzeczenie należy odrzucić. Oznacza to, że musisz obsługiwać tylko te błędy, które chcesz.

Poniższy kod pobiera ref Firebase Realtime Database i ustawia jej wartość na "world!" . Zwracając wynik set , Twoja funkcja ma gwarancję, że będzie działać, dopóki asynchroniczne zapisywanie ciągu znaków w bazie danych nie zostanie w pełni zakończone:

// 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 Cloud Functions zawiera przykłady prawidłowego zakończenia funkcji. Oto kilka, które pokazują typowe przypadki: