Front-end · 6 mondes · 18 étapes
JavaScript
Le langage du web : types, fonctions, tableaux, objets et asynchrone.
Progression
0 %
0/18 étapes terminées
Avancé · 11 min de lecture
L'asynchrone
La boucle d'événements, sans mystère
1Définition
JavaScript exécute une seule chose à la fois. Les opérations longues (réseau, minuteries) sont déléguées, et leur suite est placée dans une file d'attente traitée quand le code en cours est terminé. Les promesses représentent ces résultats à venir, et async / await permet de les écrire de haut en bas.
2Principes fondamentaux
01
Le code synchrone passe d'abord
Une fonction programmée, même à 0 ms, attend que le code en cours soit terminé.
02
await suspend une fonction, pas la page
L'interface continue de répondre pendant que la fonction async attend.
03
Paralléliser l'indépendant
Promise.all lance tout en même temps ; des await successifs attendent l'un après l'autre.
04
Rattraper au plus près
Un .catch sur la seule promesse fragile évite que Promise.all échoue en entier.
3Exemples pratiques
Séquentiel contre parallèle
1// Séquentiel : 300 ms2const a = await charger(1);3const b = await charger(2);4const c = await charger(3);5 6// Parallèle : 100 ms7const [x, y, z] = await Promise.all([charger(1), charger(2), charger(3)]);Même résultat, trois fois plus rapide, parce que les trois appels ne dépendent pas les uns des autres.
Une panne contenue
1const [profil, classement] = await Promise.all([2 charger("profil"),3 charger("classement").catch(() => "indisponible"),4]);Le classement peut tomber sans emporter le profil avec lui.
4Erreurs courantes
Oublier await
À éviter
const profil = chargerProfil(7);console.log(profil.nom);À faire
const profil = await chargerProfil(7);Pourquoi : Sans await, profil est une promesse, pas le résultat : profil.nom vaut undefined.
await dans une boucle par réflexe
À éviter
for (const id of ids) { await charger(id);}À faire
await Promise.all(ids.map(charger));Pourquoi : Les appels indépendants s'enchaînent inutilement.
Promesse rompue ignorée
À éviter
charger(); // sans catchÀ faire
charger().catch(signaler);Pourquoi : Une promesse rompue sans gestionnaire produit une erreur non traitée, souvent invisible.
5Subtilités à connaître
- ◆Les promesses passent par la file des micro-tâches, prioritaire sur celle des minuteries : un
.thens'exécute avant unsetTimeout(f, 0)programmé plus tôt. - ◆
Promise.allSettledattend tout sans jamais échouer et rend l'état de chaque promesse. - ◆
fetchne rompt sa promesse que sur une panne réseau : une réponse 404 ou 500 est une promesse tenue, à vérifier avecresponse.ok.
6Vérifie ta compréhension
Question 1/3
Score 0
console.log("A"); setTimeout(() => console.log("B"), 0); console.log("C");
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.