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
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>
Le fait de placer le mot clé async
avant une fonction en fait une fonction asynchrone. Cela fait essentiellement 2 choses à la fonction:
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.
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');
});