Sincronizzazione, asincrono e promesse

È importante gestire il ciclo di vita di una funzione per assicurarsi che si risolva correttamente. Terminando correttamente le funzioni, puoi evitare addebiti eccessivi da 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 spenga prima che la tua funzione raggiunga correttamente la sua condizione o 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. Ti consente anche di propagare errori simili a try/catch in codice sincrono. Puoi leggere le promesse nell'SDK 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, tale funzione continua a essere eseguita 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 rifiutata. Ciò significa che devi gestire solo gli errori che desideri.

Il codice seguente prende un riferimento di ref Realtime Database e ne imposta il valore su "world!" . Restituendo il risultato di set , la tua funzione è garantita per continuare a funzionare 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 di funzione corretta. Eccone alcuni che dimostrano casi tipici: