È importante gestire il ciclo di vita di una funzione per garantire che venga risolta correttamente. Terminando correttamente le funzioni, è possibile evitare addebiti eccessivi derivanti da funzioni che vengono eseguite per troppo tempo o che si ripetono all'infinito. Inoltre, puoi assicurarti che l'istanza Cloud Functions che esegue la tua funzione non si arresti prima che la funzione raggiunga con successo 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()
ores.end()
. - Termina una funzione sincrona con un
return;
dichiarazione.
Semplifica 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 errori simili a try/catch nel codice sincrono. Puoi leggere le promesse nell'SDK di Firebase sul blog di Firebase e le promesse in generale su MDN .
Come funzionano le promesse con le funzioni
Quando restituisci una promessa JavaScript a una funzione, quella funzione continua a essere eseguita finché la promessa non viene risolta o rifiutata. Per indicare che una funzione ha completato il suo lavoro con successo, la promessa dovrebbe essere risolta. Per indicare un errore, la promessa dovrebbe essere respinta. Ciò significa che devi gestire solo gli errori che desideri.
Il codice seguente prende un ref
al database Realtime Firebase e imposta il suo valore su "world!"
. Restituendo il risultato di set
, è garantito che la funzione continui a essere eseguita fino al completamento del lavoro asincrono di scrittura della stringa nel database:
// 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!');
});
});
Esempi nel contesto
La maggior parte dei nostri esempi di codice Cloud Functions includono esempi di corretta terminazione della funzione. Eccone alcuni che illustrano casi tipici:
- Trigger del database in tempo reale : una funzione HTTP seguita da un reindirizzamento
- Trigger di Cloud Storage : un download di archiviazione seguito da
then
- Scrittura webhook su Realtime Database : errore generato all'interno di una clausola
then
- Elimina periodicamente gli account inutilizzati : una promessa rifiutata