Les langages JavaScript Le code asynchrone
Promesses, async et await
Charger des données, attendre un clic, patienter une seconde : ces opérations prennent du temps. JavaScript ne s'arrête pas pour les attendre ; il continue, et réagit quand elles se terminent.
Les minuteurs
setTimeout(() => console.log("plus tard"), 1000); // dans 1000 ms
console.log("tout de suite");
Affiche « tout de suite », puis « plus tard ». setInterval répète ;
clearTimeout et clearInterval annulent.
Ici, le temps est simulé : attendre une minute ne prend aucun temps réel, et l'ordre des événements est toujours le même.
Les promesses
Une promesse représente un résultat qui n'existe pas encore. Elle finira tenue (avec une valeur) ou rompue (avec une erreur).
function attendre(ms) {
return new Promise((resoudre) => setTimeout(resoudre, ms));
}
attendre(500).then(() => console.log("500 ms plus tard"));
async et await
await attend la promesse sans bloquer le reste du programme ; il ne
s'utilise que dans une fonction async, qui renvoie elle-même une promesse.
async function demarrer() {
console.log("Préparation...");
await attendre(1000);
console.log("Prêt !");
}
Les erreurs se rattrapent avec try/catch, comme d'habitude. Une promesse
rompue que personne ne rattrape est signalée comme une erreur.
Attendre plusieurs choses à la fois
const [profil, messages] = await Promise.all([chargerProfil(), chargerMessages()]);
Les deux chargements se font en même temps : on attend le plus long, pas
la somme des deux. Dans une boucle, un await par tour fait au contraire
tout l'un après l'autre.
2 exercices pour cette lecon
Les exercices demandent un compte : il faut bien enregistrer votre progression quelque part. La lecture, elle, reste libre. Creer un compte
-
Une réponse retardée moyen lecon a valider
-
Tout charger en même temps difficile lecon a valider