Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Synchronisation, asynchrone et promesses

Il est important de gérer le cycle de vie d'une fonction pour s'assurer qu'elle se résout correctement. En mettant correctement fin aux fonctions, vous pouvez éviter des charges excessives provenant de fonctions qui s'exécutent trop longtemps ou bouclent à l'infini. En outre, vous pouvez vous assurer que l'instance Cloud Functions exécutant votre fonction ne s'arrête pas avant que votre fonction n'atteigne avec succès sa condition ou son état de fin.

Utilisez ces approches recommandées pour gérer le cycle de vie de vos fonctions :

  • Fonctions de Resolve qui effectuent le traitement asynchrone (également connu sous le nom des « fonctions de base ») en retournant une promesse JavaScript .
  • Terminate fonctions HTTP avec res.redirect() , res.send() , ou res.end() .
  • Mettre fin à une fonction synchrone avec un return; déclaration.

Simplifiez le code asynchrone avec les promesses JavaScript

Les promesses sont une alternative moderne aux rappels pour le code asynchrone. Une promesse représente une opération et la valeur future qu'elle peut retourner. Il vous permet également de propager des erreurs similaires à try/catch dans du code synchrone. Vous pouvez lire au sujet des promesses dans le SDK Firebase sur le blog Firebase et promesses en général sur MDN .

Comment les promesses fonctionnent avec les fonctions

Lorsque vous renvoyez une promesse JavaScript à une fonction, cette fonction continue de s'exécuter jusqu'à ce que la promesse soit résolue ou rejetée. Pour indiquer qu'une fonction a terminé son travail avec succès, la promesse doit être résolue. Pour indiquer une erreur, la promesse doit être rejetée. Cela signifie que vous n'avez besoin de gérer que les erreurs que vous souhaitez.

Le code suivant prend un temps réel Firebase Database ref et définit sa valeur "world!" . En retournant le résultat d' set , votre fonction est garantie pour continuer à fonctionner jusqu'à ce que le travail asynchrone d'écrire la chaîne à la base de données est entièrement terminée:

// 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!');
  });
});

Exemples en contexte

La plupart de nos fonctions de Cloud exemples de code comprennent des exemples de terminaison de bon fonctionnement. En voici quelques-uns qui illustrent des cas typiques :