Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
È importante gestire il ciclo di vita di una funzione per assicurarsi che venga risolta
correttamente. Terminando correttamente le funzioni, puoi evitare addebiti eccessivi
per le funzioni che vengono eseguite troppo a lungo o che entrano in un ciclo infinito. Inoltre, puoi assicurarti
che l'istanza Cloud Functions che esegue la funzione non si arresti
prima che la funzione raggiunga correttamente la condizione o lo stato di terminazione.
Utilizza questi approcci consigliati per gestire il ciclo di vita delle tue funzioni:
Risolvi le funzioni che eseguono l'elaborazione asincrona (note anche come "funzioni in background") restituendo una
promessa
JavaScript.
Termina le funzioni HTTP con res.redirect(), res.send() o
res.end().
Termina una funzione sincrona con un'istruzione return;.
Semplificare il codice asincrono con le promesse JavaScript
Le promesse sono un'alternativa moderna ai callback per il codice asincrono. Una promessa
rappresenta un'operazione e il valore futuro che potrebbe restituire. Consente inoltre di
propagare gli errori in modo simile a try/catch nel codice sincrono. Puoi leggere informazioni sulle promesse nell'SDK Firebase nel blog di Firebase e sulle promesse in generale su MDN.
Come funzionano le promesse con le funzioni
Quando restituisci una promessa JavaScript a una funzione, questa continua a essere eseguita finché la promessa non viene risolta o rifiutata. Per indicare che una funzione ha completato il suo lavoro correttamente, la promessa deve essere risolta. Per
indicare un errore, la promessa deve essere rifiutata. Ciò significa che devi gestire solo gli errori che vuoi.
Il seguente codice prende un Firebase Realtime Databaseref e imposta il suo valore su
"world!". Restituendo il risultato di set, la funzione è garantita per
continuare a essere eseguita finché l'operazione asincrona di scrittura della stringa nel database
non è completamente completata:
La maggior parte dei nostri Cloud Functionsesempi di codice include esempi di terminazione corretta della funzione. Ecco alcuni esempi che illustrano
casi tipici:
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-09-03 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"]]