JavaScriptCode asynchrone

async function

Déclare une fonction asynchrone, qui renvoie toujours une promesse et peut utiliser le mot-clé await à l’intérieur.

Renvoie
Une promesse (Promise) qui se résout avec la valeur de return, ou qui est rejetée avec l’erreur levée.
Sur cette page

Exemple

#
JavaScript
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms))

async function loadProfile(name) {
  await wait(300)
  return { name, level: 7 }
}

const promise = loadProfile('Léa')
console.log(promise)

const profile = await promise
console.log(profile)
Console
Promise { <pending> }
{ name: 'Léa', level: 7 }

Définition et utilisation

#

Le mot-clé async placé avant une fonction la transforme en fonction asynchrone. Une telle fonction renvoie toujours une promesse : la valeur de return devient la valeur de la promesse résolue, et une exception levée entraîne son rejet.

À l’intérieur d’une fonction async, vous pouvez utiliser await pour attendre le résultat d’une autre promesse. Le code ressemble alors à du code ordinaire, exécuté de haut en bas, et vous attrapez les erreurs avec le bloc try...catch habituel plutôt qu’avec la méthode catch().

async fonctionne avec toutes les formes de fonctions : déclaration, expression, fonction fléchée (async () => {}) et méthode d’un objet ou d’une classe. Appeler une fonction async ne bloque pas le programme. Le code écrit après l’appel s’exécute immédiatement, avant que la fonction ait terminé son travail.

Syntaxe

#
Syntaxe
async function name(param1, param2) {
  …
}

const name = async (param) => {
  …
}

Plus d’exemples

#
Une exception rejette la promesse
JavaScript
async function buyCourse(price, balance) {
  if (balance < price) throw new Error('Pas assez de pièces')
  return balance - price
}

buyCourse(50, 80).then((rest) => console.log('Reste :', rest))
buyCourse(90, 80).catch((error) => console.log('Erreur :', error.message))
Console
Reste : 30
Erreur : Pas assez de pièces
Fonction fléchée et méthode
JavaScript
const getPoints = async () => 120

const shop = {
  async buy(item) {
    const points = await getPoints()
    return `${item}: il reste ${points - 100} points`
  }
}

console.log(await shop.buy('Nouvel avatar'))
Console
Nouvel avatar: il reste 20 points

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Le simple appel d’une fonction async donne un objet Promise. Pour obtenir le résultat, utilisez await ou then().
  • Ne marquez pas une fonction comme async si elle ne fait rien d’asynchrone. Vous transformeriez inutilement son résultat en promesse.
  • Gérez les erreurs d’une fonction async avec try...catch à l’intérieur, ou avec catch() au moment de l’appel.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.