获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

Sincronização, assíncrona e promessas

É importante gerenciar o ciclo de vida de uma função para garantir que ela seja resolvida corretamente. Ao encerrar as funções corretamente, você pode evitar cobranças excessivas de funções que são executadas por muito tempo ou fazem um loop infinito. Além disso, você pode garantir que a instância do Cloud Functions que executa sua função não seja encerrada antes que a função atinja com êxito a condição ou estado de encerramento.

Use estas abordagens recomendadas para gerenciar o ciclo de vida de suas funções:

  • Resolva funções que executam processamento assíncrono (também conhecido como "funções em segundo plano") retornando uma promessa JavaScript .
  • Encerre funções HTTP com res.redirect() , res.send() ou res.end() .
  • Finalize uma função síncrona com um return; declaração.

Simplifique o código assíncrono com promessas de JavaScript

As promessas são uma alternativa moderna aos retornos de chamada para código assíncrono. Uma promessa representa uma operação e o valor futuro que ela pode retornar. Ele também permite propagar erros semelhantes ao try/catch no código síncrono. Você pode ler sobre promessas no SDK do Firebase no The Firebase Blog e promessas em geral no MDN .

Como as promessas funcionam com funções

Quando você retorna uma promessa JavaScript para uma função, essa função continua em execução até que a promessa seja resolvida ou rejeitada. Para indicar que uma função concluiu seu trabalho com êxito, a promessa deve ser resolvida. Para indicar um erro, a promessa deve ser rejeitada. Isso significa que você só precisa lidar com os erros que desejar.

O código a seguir usa uma ref do Firebase Realtime Database e define seu valor como "world!" . Ao retornar o resultado de set , é garantido que sua função continuará em execução até que o trabalho assíncrono de gravar a string no banco de dados seja totalmente concluído:

// 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!');
  });
});

Exemplos no contexto

A maioria dos nossos exemplos de código do Cloud Functions inclui exemplos de encerramento de função adequado. Aqui estão alguns que demonstram casos típicos: