Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Expression async function

Baseline
Large disponibilité

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis avril 2017.

Les mots-clés async function peuvent être utilisés pour définir une fonction asynchrone au sein d'une expression.

Vous pouvez également définir des fonctions asynchrones en utilisant une déclaration async function ou la syntaxe fléchée.

Syntaxe

js
async function (param0) {
  statements
}
async function (param0, param1) {
  statements
}
async function (param0, param1, /* …, */ paramN) {
  statements
}

async function name(param0) {
  statements
}
async function name(param0, param1) {
  statements
}
async function name(param0, param1, /* …, */ paramN) {
  statements
}

Note : Une instruction d'expression ne peut pas commencer par les mots-clés async function afin d'éviter toute ambiguïté avec une déclaration async function. Les mots-clés async function ne commencent une expression que lorsqu'ils apparaissent dans un contexte qui ne peut pas accepter d'instructions.

Paramètres

name Facultatif

Le nom de la fonction. Peut être omis, auquel cas la fonction est anonyme. Le nom n'est local qu'au corps de la fonction.

paramN Facultatif

Le nom d'un paramètre formel pour la fonction. Pour la syntaxe des paramètres, voir la référence sur les fonctions.

statements Facultatif

Les instructions qui composent le corps de la fonction.

Description

Une expression async function est très proche, et partage quasiment la même syntaxe avec une déclaration async function. La différence principale entre une expression async function et une déclaration async function est le nom de la fonction, qui peut être omis dans les expressions async function pour créer des fonctions anonymes. Une expression async function peut être utilisée comme une IIFE (Immediately Invoked Function Expression) qui s'exécute dès qu'elle est définie, ce qui permet de simuler un await de niveau supérieur. Voir également le chapitre sur les fonctions pour plus d'informations.

Exemples

Utiliser l'expression async function

js
function completeeApres2Secondes(x) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(x);
    }, 2000);
  });
}

// l'expression async function affectée à une variable
const add = async function (x) {
  const a = await completeeApres2Secondes(20);
  const b = await completeeApres2Secondes(30);
  return x + a + b;
};

add(10).then((v) => {
  console.log(v); // affiche 60 après 4 secondes.
});

// l'expression async function utilisée comme IIFE
(async function (x) {
  const p1 = completeeApres2Secondes(20);
  const p2 = completeeApres2Secondes(30);
  return x + (await p1) + (await p2);
})(10).then((v) => {
  console.log(v); // affiche 60 après 2 secondes.
});

IIFE asynchrone

Un IIFE async permet d'utiliser await et for...await dans des contextes où await de niveau supérieur n'est pas disponible. Ici, nous utilisons une fonction fléchée pour définir l'IIFE, mais les expressions async function peuvent également être utilisées.

js
const obtenirFluxFichier = async (url) => {
  // implémentation
};

(async () => {
  const diffusion = await obtenirFluxFichier(
    "https://domain.name/path/file.ext",
  );
  for await (const fragment of diffusion) {
    console.log({ fragment });
  }
})();

Spécifications

Spécification
ECMAScript® 2027 Language Specification
# sec-async-function-definitions

Compatibilité des navigateurs

Voir aussi