Promesses et async-await en JS

Alexandre Niveau
GREYC — Université de Caen

Promesses en JS

  • Si on veut enchaîner des fonctions asynchrones (e.g. requête AJAX après 3 secondes, qui récupère une image et récupère son contenu sous forme de data-URL…), il faut définir des callbacks dans des callbacks
    • callback hell, difficile à lire (on décrit l'effet avant de lancer la requête), difficile de traiter les erreurs correctement
  • Avec les promesses, ces problèmes disparaissent
    • ordre du code logique
    • erreur rattrapables à la fin de la chaîne
  • On peut faire en sorte d'attendre que plusieurs fonctions asynchrones soient terminées avec Promise.all
  • Voir intros aux promesses : très rapide pour se faire une idée ; tuto MDN complet ; tuto très progressif
  • montrer une promesse, avec un timeout dedans, ou même pas en fait : expliquer que resolve c'est comme return et reject comme throw.
  • expliquer que qd on veut faire un truc asynchrone, on va faire une fonction qui renvoie une promesse (un «prometteur» ??)
  • on peut chaîner les prometteurs avec then, et catch

Async/await

  • ES8 ajoute les mots-clefs async et await, qui rendent les choses encore plus naturelles
  • Derrière, ce sont toujours des promesses
  • Syntaxe beaucoup plus naturelle : dans une fonction async, on peut attendre (await) qu'un appel asynchrone soit terminé avant de passer à la ligne suivante
  • Permet notamment d'utiliser les try/catch habituels
  • MDN: async et await