Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
Es importante administrar el ciclo de vida de una función para garantizar que se resuelva de manera apropiada. Cuando finalizas las funciones de forma correcta, puedes evitar cargos excesivos debido a funciones que se ejecutan durante mucho tiempo o entran en un bucle infinito. Además, puedes asegurarte de que la instancia de Cloud Functions que ejecuta la función no se cierre antes de que la función alcance su condición o estado de finalización de manera correcta.
Usa los siguientes enfoques recomendados para administrar el ciclo de vida de tus funciones:
Resuelve funciones que realizan procesamientos asíncronos (también conocidas como “funciones en segundo plano”) mediante la generación de una promesa de JavaScript.
Finaliza las funciones de HTTP con res.redirect(), res.send() o res.end().
Finaliza una función síncrona con una declaración return;.
Simplifica el código asíncrono con promesas de JavaScript
Las promesas son una alternativa moderna a las devoluciones de llamada para el código asíncrono. Una promesa representa una operación y el valor futuro que podría mostrar. También te permite propagar errores de manera similar a un bloque try/catch en el código síncrono. Puedes leer sobre las promesas en el SDK de Firebase en el blog de Firebase y las promesas en general en MDN.
Cómo funcionan las promesas con las funciones
Cuando muestras una promesa de JavaScript a una función, esta sigue ejecutándose hasta que la promesa se resuelve o rechaza. Para indicar que una función concluyó de manera correcta, la promesa debe resolverse. Para indicar un error, la promesa debe rechazarse. Esto significa que solo debes solucionar los errores que desees.
El siguiente código toma una ref de Firebase Realtime Database y le asigna el valor
"world!". La función muestra el resultado de set, lo que garantiza que siga ejecutándose hasta que el trabajo asíncrono de escribir la cadena en la base de datos finalice por completo:
La mayoría de nuestras muestras de
código de Cloud Functions
incluyen ejemplos de cómo finalizar correctamente las funciones. Estos son algunos ejemplos de casos típicos:
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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"]]