web-dev-qa-db-fra.com

Comment appeler une fonction asynchrone

Je veux que la console imprime d'abord '1', mais je ne sais pas comment appeler des fonctions asynchrones et attendre son exécution avant de passer à la ligne de code suivante. 

const request = require('request');

async function getHtml() 
{
    await request('https://google.com/', function (error, response, body) {
    console.log('1');
  });

}

getHtml();
console.log('2');

Bien sûr, le résultat que je reçois est 

2
1
5
chris

selon async_function MDN

Valeur de retour

Une promesse qui sera résolue avec la valeur renvoyée par la fonction asynchrone ou rejetée avec une exception non capturée levée depuis la fonction asynchrone.

la fonction async va toujours retourner une promesse et vous devez utiliser .then() ou await pour aaccess sa valeur

async function getHtml() {
  const request = await $.get('https://jsonplaceholder.typicode.com/posts/1')  
  return request
}

getHtml()
  .then((data) => { console.log('1')})
  .then(() => { console.log('2')});
  
// OR 

(async() => {
  console.log('1')
  await getHtml()  
  console.log('2')
})()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

8
Taki

Le fait de placer le mot clé async avant une fonction en fait une fonction asynchrone. Cela fait essentiellement 2 choses à la fonction:

  1. Si une fonction ne renvoie pas une promesse, le moteur JS intégrera cette valeur dans une promesse résolue. Ainsi, la fonction retournera toujours une promesse.
  2. Nous pouvons maintenant utiliser le mot clé await dans cette fonction. Le mot clé await permet d'attendre la résolution d'une promesse. Ce qui nous permet d'écrire du code asynchrone de manière synchrone. Par exemple ce tutoriel

Dans votre exemple, la console.log(2) finira toujours toujours en premier, car dans une application JS, le code synchrone se terminera toujours avant le code asynchrone. Les promesses sont toujours asynchrones et sont donc des fonctions async comme leur nom l'indique également asynchrones. Pour plus d'informations sur cette sortie la boucle d'événement.

1

Vous devez await la fonction asynchrone, si vous voulez attendre qu'elle soit résolue avant de continuer ou utilisez .then()

await getHtml();
console.log('2');

ou

getHtml()
 .then(() => {
    console.log('2');
 });
0
h1b9b