Passer au contenu principal
eLearner.app
Module 7 · Leçon 2 sur 426/32 dans le cours~12 min
Leçons du module (2/4)

async / await

async/await est une syntaxe plus claire pour travailler avec les Promise : le code se lit comme du code synchrone, mais utilise sous le capot exactement les mêmes Promise que la leçon précédente.

async function

Une fonction déclarée avec async retourne toujours une Promise.

JS
async function quaranta() {
  return 40;
}

quaranta(); // Promise { 40 }
quaranta().then((v) => console.log(v)); // 40

Même si vous retournez une valeur « normale », la fonction l'enveloppe dans une Promise résolue.

await

Dans une async function, vous pouvez placer await devant une Promise : l'exécution se met en pause jusqu'à ce que la Promise soit résolue, puis continue avec la valeur résolue.

JS
async function somma() {
  const a = await Promise.resolve(10);
  const b = await Promise.resolve(20);
  return a + b; // 30
}

Équivalent avec .then (plus verbeux) :

JS
function somma() {
  return Promise.resolve(10).then((a) => Promise.resolve(20).then((b) => a + b));
}

await propage les erreurs

Si la Promise est rejetée, await relève l'erreur. Vous pouvez la capturer avec un try/catch classique :

JS
async function leggi() {
  try {
    const x = await Promise.reject(new Error('no'));
    return x;
  } catch (err) {
    return 'errore: ' + err.message;
  }
}

leggi(); // Promise { 'errore: no' }

Fonctions fléchées async

JS
const raddoppia = async (n) => n * 2;
raddoppia(5); // Promise { 10 }

À vous de jouer

Exercice#js.m7.l2.e1
Tentatives : 0Chargement…

Définissez une `async function addOne(p)` qui reçoit une Promise contenant un nombre et retourne (sous forme de Promise) le nombre + 1. Utilisez await.

Chargement de l'éditeur…
Afficher l'indice

const n = await p; return n + 1;

Solution disponible après 3 tentatives

Exercice de révision

Exercice#js.m7.l2.e2
Tentatives : 0Chargement…

Définissez `sumTwo(pa, pb)` en mode async : reçoit deux Promise contenant des nombres, retourne leur somme. Utilisez deux await séquentiels.

Chargement de l'éditeur…
Afficher l'indice

await ognuna, poi return a + b.

Solution disponible après 3 tentatives