Sincronizzazione, asincrono e promesse

È importante gestire il ciclo di vita di una funzione per garantire che si risolva correttamente. Terminando correttamente le funzioni, è possibile evitare addebiti eccessivi dovuti a funzioni che vengono eseguite troppo a lungo o che si ripetono all'infinito. Inoltre, puoi assicurarti che l'istanza di Cloud Functions che esegue la tua 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 (nota anche come "funzioni in background") restituendo una promessa JavaScript .
  • Termina le funzioni HTTP con res.redirect() , res.send() o res.end() .
  • Terminare 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 su The Firebase Blog 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 funzionare finché la promessa non viene risolta o rifiutata. Per indicare che una funzione ha completato il proprio lavoro con successo, la promessa dovrebbe essere risolta. Per indicare un errore, la promessa dovrebbe essere respinta. Ciò significa che devi solo gestire gli errori che desideri.

Il codice seguente prende un ref del database in tempo reale Firebase e ne imposta il 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 di Cloud Functions include esempi di terminazione corretta della funzione. Eccone alcuni che dimostrano casi tipici: