Es importante administrar el ciclo de vida de una función para garantizar que se resuelva correctamente. Al finalizar las funciones correctamente, puede evitar cargos excesivos por funciones que se ejecutan durante demasiado tiempo o que se repiten infinitamente. Además, puede asegurarse de que la instancia de Cloud Functions que ejecuta su función no se apague antes de que su función alcance con éxito su condición o estado de terminación.
Utilice estos enfoques recomendados para administrar el ciclo de vida de sus funciones:
- Resuelva funciones que realizan procesamiento asíncrono (también conocidas como "funciones en segundo plano") devolviendo una promesa de JavaScript .
- Termine las funciones HTTP con
res.redirect()
,res.send()
ores.end()
. - Terminar una función síncrona con un
return;
declaración.
Simplifique el código asíncrono con promesas de JavaScript
Las promesas son una alternativa moderna a las devoluciones de llamada para código asíncrono. Una promesa representa una operación y el valor futuro que puede devolver. También le permite propagar errores similares a try/catch en código síncrono. Puede leer acerca de las promesas en Firebase SDK en The Firebase Blog y las promesas en general en MDN .
Cómo funcionan las promesas con las funciones
Cuando devuelve una promesa de JavaScript a una función, esa función sigue ejecutándose hasta que la promesa se resuelva o rechace. Para indicar que una función ha completado su trabajo con éxito, la promesa debe resolverse. Para indicar un error, la promesa debe ser rechazada. Esto significa que solo necesita manejar los errores que desee.
El siguiente código toma una ref
de base de datos en tiempo real de Firebase y establece su valor en "world!"
. Al devolver el resultado de set
, se garantiza que su función seguirá ejecutándose hasta que se complete por completo el trabajo asincrónico de escribir la cadena en la base de datos:
// 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!');
});
});
Ejemplos en contexto
La mayoría de nuestras muestras de código de Cloud Functions incluyen ejemplos de terminación de función adecuada. Aquí hay algunos que demuestran casos típicos:
- Disparador de base de datos en tiempo real : una función HTTP seguida de una redirección
- Disparador de almacenamiento en la nube : una descarga de almacenamiento seguida de
then
- Webhook en escritura de base de datos en tiempo real : un error arrojado dentro de una cláusula
then
- Eliminar periódicamente las cuentas no utilizadas : una promesa rechazada