J'essaie la fonctionnalité asynchrone/attente. J'ai un tel code imitant une demande:
const getJSON = async () => {
const request = () => new Promise((resolve, reject) => (
setTimeout(() => resolve({ foo: 'bar'}), 2000)
));
const json = await request();
return json;
}
Quand j'utilise le code de cette façon
console.log(getJSON()); // returns Promise
il retourne une promesse
mais quand j'appelle cette ligne de code
getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
il imprime json comme prévu
Est-il possible d'utiliser uniquement du code comme console.log(getJSON())
? Qu'est-ce que je ne comprends pas?
Chaque fonction async
renvoie un objet Promise
. L'instruction await
fonctionne sur un Promise
, en attendant que Promise
resolve
s ou reject
s.
Donc non, vous ne pouvez pas faire console.log
Directement sur le résultat d'une fonction asynchrone, même si vous utilisez await
. L'utilisation de await
fera attendre votre fonction puis renverra un Promise
qui se résout immédiatement, mais il ne déroulera pas le Promise
pour vous. Vous devez toujours déballer la Promise
renvoyée par la fonction async
, soit à l'aide de await
, soit à l'aide de .then()
.
Lorsque vous utilisez .then()
au lieu de console.log
Ging directement, la méthode .then()
met le résultat de la promesse à votre disposition. Mais vous ne pouvez pas obtenir le résultat du Promise
de à l'extérieur de la promesse. Cela fait partie du modèle de travail avec Promises.
valeur de retour d'une fonction asynchrone sera toujours un objet AsyncFunction , qui renverra un Promise
lors de l'appel. Vous ne pouvez pas modifier ce type de retour. Le point de async/await
consiste à attendre facilement la fin d'un autre processus asynchrone dans une fonction asynchrone.