1. Pourquoi l’asynchronisme est indispensable ?

JavaScript s’exécute dans un thread d’exécution unique (Single-Threaded). Si une requête réseau vers un serveur distant bloquait l’exécution de manière synchrone pendant 2 secondes, toute l’interface de votre navigateur deviendrait totalement figée et non réactive.

Grâce à la boucle d’événements (Event Loop), les opérations longues (requêtes réseau, minuteurs, lectures de fichiers) sont déléguées aux API de l’environnement hôte, permettant à l’interface de rester parfaitement fluide.

2. La mécanique des Promesses (Promises)

Une promesse représente une valeur future qui peut se trouver dans l’un de trois états : en attente (pending), résolue avec succès (fulfilled), ou rejetée avec une erreur (rejected).

3. La syntaxe moderne async / await

Introduits pour simplifier l’écriture des chaînes de promesses (.then().catch()), les mots-clés async et await permettent de rédiger du code asynchrone avec la clarté et la linéarité du code synchrone :

// Fonction asynchrone simulant un chargement de données
const recupererDonneesEcole = async () => {
    try {
        console.log("Début de l'interrogation...");
        const reponse = await fetch("https://api.ecole-informatique.ch/v1/status");
        if (!reponse.ok) {
            throw new Error(`Erreur HTTP : statut ${reponse.status}`);
        }
        const data = await reponse.json();
        console.log("Statut des serveurs de Genève :", data.etat);
    } catch (erreur) {
        console.error("Échec de la communication réseau :", erreur.message);
    }
};

Synthèse pédagogique : Enveloppez systématiquement vos appels await au sein d’un bloc try / catch pour intercepter toute défaillance de connexion réseau.