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
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