Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
É 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 cargas excessivas de funções que funcionam por muito tempo ou entram em um loop infinito. Além disso, você garante que a
instância do Cloud Functions que executa a função não seja desligada
antes que a função alcance a condição ou o estado encerrado.
Use essas abordagens recomendadas para gerenciar o ciclo de vida das suas funções:
Resolva funções que executam um processamento assíncrono, também conhecido como "funções em segundo plano", com o retorno de uma promessa de JavaScript.
Encerre funções HTTP com res.redirect(), res.send() ou res.end().
Encerre uma função síncrona com uma instrução return;.
Simplificar o código assíncrono com promessas de JavaScript
Promessas são uma alternativa moderna para retornos de chamada com códigos assíncronos. Uma promessa representa uma operação e o valor futuro que ela pode retornar. Ela também permite propagar erros similares a try/catch em códigos síncronos. Leia sobre promessas no SDK do Firebase no Blog do Firebase e promessas em geral no MDN.
Como as promessas funcionam com funções
Quando você retorna uma promessa de 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 foi concluída com sucesso, a promessa deve ser resolvida. Para indicar um erro, a promessa deve ser rejeitada. Isso significa que você só precisará lidar com os erros que quiser.
O código a seguir usa um ref de Firebase Realtime Database e define o respectivo valor como
"world!". Ao retornar o resultado de set, a função continuará em execução
até que o trabalho assíncrono de gravação da string no banco de dados
seja totalmente concluído:
A maioria dos exemplos de
código do Cloud Functions
inclui exemplos de encerramento correto da função. Veja abaixo alguns exemplos que demonstram casos comuns:
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-09-04 UTC."],[],[],null,["\u003cbr /\u003e\n\nIt's important to manage the lifecycle of a function to ensure that it resolves\nproperly. By terminating functions correctly, you can avoid excessive charges\nfrom functions that run for too long or loop infinitely. Also, you can make sure\nthat the Cloud Functions instance running your function does not shut down\nbefore your function successfully reaches its terminating condition or state.\n\nUse these recommended approaches to manage the lifecycle of your functions:\n\n- Resolve functions that perform **asynchronous** processing (also known as \"background functions\") by returning a [JavaScript\n promise](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n- Terminate **HTTP functions** with `res.redirect()`, `res.send()`, or `res.end()`.\n- Terminate a **synchronous** function with a `return;` statement.\n\n| **Caution:** In all cases, be careful to avoid any situation in which the function's result actually retriggers the function --- for example, a function triggered by writes to a specific Realtime Database path that concludes by writing to that same path.\n\nSimplify asynchronous code with JavaScript promises\n\nPromises are a modern alternative to callbacks for asynchronous code. A promise\nrepresents an operation and the future value it may return. It also lets you\npropagate errors similar to try/catch in synchronous code. You can read about\npromises in the Firebase SDK on [The Firebase\nBlog](https://firebase.googleblog.com/2016/01/keeping-our-promises-and-callbacks_76.html),\nand promises in general on\n[MDN](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise).\n\nHow promises work with functions\n\nWhen you return a JavaScript promise to a function, that function\nkeeps running until the promise is resolved or rejected. To indicate that a\nfunction has completed its work successfully, the promise should be resolved. To\nindicate an error, the promise should be rejected. This means you only need to\nhandle errors that you want to.\n\nThe following code takes a Firebase Realtime Database `ref` and sets its value to\n`\"world!\"`. By returning the result of `set`, your function is guaranteed to\nkeep running until the asynchronous work of writing the string to the database\nis fully completed: \n\n // Always change the value of \"/hello\" to \"world!\"\n exports.hello = functions.database.ref('/hello').onWrite(event =\u003e {\n // set() returns a promise. We keep the function alive by returning it.\n return event.data.ref.set('world!').then(() =\u003e {\n console.log('Write succeeded!');\n });\n });\n\nExamples in context\n\nMost of our Cloud Functions [code\nsamples](https://github.com/firebase/functions-samples)\ninclude examples of proper function termination. Here are a few that demonstrate\ntypical cases:\n\n- [Realtime Database\n trigger](https://github.com/firebase/functions-samples/tree/main/Node-1st-gen/quickstarts/uppercase-rtdb/functions/index.js): an HTTP function followed by a redirect\n- [Cloud Storage\n trigger](https://github.com/firebase/functions-samples/tree/main/Node-1st-gen/quickstarts/thumbnails/functions/index.js): A storage download followed by `then`\n- [Webhook on Realtime Database\n write](https://github.com/firebase/functions-samples//tree/main/Node-1st-gen/minimal-webhook/functions/index.js): An error thrown inside a `then` clause\n- [Periodically delete unused\n accounts](https://github.com/firebase/functions-samples//tree/main/Node-1st-gen/delete-unused-accounts-cron/functions/index.js): A rejected promise"]]