Sincronizzazione, asincrono e promesse

È 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() o res.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: