Comment puis-je retourner la valeur d'une fonction asynchrone? J'ai essayé d'aimer ça
const axios = require('axios');
async function getData() {
const data = await axios.get('https://jsonplaceholder.typicode.com/posts');
return data;
}
console.log(getData());
ça me retourne ça,
Promise { <pending> }
Vous ne pouvez pas await
quelque chose en dehors de async
portée. Pour obtenir le résultat attendu, vous devez vous envelopper console.log
en asynchrone IIFE i.e
async function getData() {
return await axios.get('https://jsonplaceholder.typicode.com/posts');
}
(async () => {
console.log(await getData())
})()
Worked
sample.
Plus d'informations sur async/await
Puisque axios
renvoie une promesse, le async/await
peut être omis pour la fonction getData
de la manière suivante:
function getData() {
return axios.get('https://jsonplaceholder.typicode.com/posts');
}
et ensuite faire comme nous le faisions avant
(async () => {
console.log(await getData())
})()
votre fonction getData retournera une promesse.
Donc vous pouvez soit:
await
la fonction aussi pour obtenir le résultat. Cependant, pour pouvoir utiliser await
, vous devez utiliser une fonction async
et vous devez donc "emballer" ceci:
async function callAsync() {
var x = await getData();
console.log(x);
}
callAsync();
(J'ai nommé la fonction pour plus de clarté, mais dans ce scénario, on utilisera plutôt un appel de fonction anonyme; voir la réponse de TheReason.)
ou
utilisez le résultat comme une promesse normale, ce qui est ce qu'une fonction asynchrone retourne.
Vous devez utiliser then
avec un rappel:
getData().then(x => {
console.log(x);
}
Les autres réponses ont couvert cette amende; mais j'aimerais intervenir et dire de prendre l'habitude de créer et d'appeler une fonction main
plutôt que d'exécuter des tâches dans la portée globale. c'est à dire.
async main(){
let result = await getData();
}
main().catch(console.log);
Ceci est assez clair pour ceux qui lisent votre code qu'il s'agit de votre point d'entrée de l'application