Comment résoudre le message d'erreur await is only valid in async function en JavaScript ?

Les interactions avec les pages internet ont énormément évolué au fur et à mesure des années. Au départ, le langage JavaScript n'était utilisé que ponctuellement. Aujourd'hui, on peut écrire un site entièrement avec ce langage. Pour répondre à ce besoin croissant de dynamisme, les fonctions asynchrones ont été créées. Elles permettent d'exécuter du code en parallèle sans attendre la réponse. Elles sont très utilisées dans Node.js, car le système fonctionne entièrement de manière asynchrone. Le message d'erreur "await is only valid in async function" est lié à l'utilisation de ces fonctions et du mot-clé "await".

Pour utiliser une fonction asynchrone, on doit la définir avec le mot-clé "async". JavaScript va alors lancer la fonction puis continuer à exécuter le code en dessous sans attendre la suite.

// Fonction asynchrone
const maFonction = async function(a, b) {
  sleep(5),
  console.log(a+b),
}
// Appel
maFonction(1, 2),
//Ce code sera exécuté tout de suite sans attendre la fin de la fonction maFonction(),
console.log(résultat de l'addition :"),

Le mot-clé "await" ne peut être utilisé qu'à l'intérieur d'une fonction asynchrone. Il permet d'attendre le résultat d'une promesse retournée par une fonction asynchrone. On peut ainsi utiliser du code synchrone dans une fonction asynchrone, ce qui permet d'ordonner plus facilement son code et de pouvoir utiliser le même code de manière synchrone ou asynchrone selon les situations. Si vous obtenez par contre le message d'erreur "await is only valid in async function", c'est que le mot-clé n'a pas été utilisé dans une fonction asynchrone. Vous devez réécrire alors votre code ou vérifier qu'il ne vous manque pas le mot-clé "async" dans une déclaration.

// Fonction asynchrone
const maFonction = async function(a, b) {
  sleep(5),
  return a+b,
}

//Fonction asynchrone qui va attendre la fonction maFonction
const start = async function() {
    const resultat = await maFonction(1, 2),
    console.log(resultat),
}
//Appel de la fonction
start(),

JavaScript