J'essaie d'apprendre async-wait. Dans ce code -
const myFun = () => {
let state = false;
setTimeout(() => {state = true}, 2000);
return new Promise((resolve, reject) => {
setTimeout(() => {
if(state) {
resolve('State is true');
} else {
reject('State is false');
}
}, 3000);
});
}
const getResult = async () => {
return await myFun();
}
console.log(getResult());
pourquoi est-ce que je reçois une sortie en tant que -
Promise { <pending> }
Au lieu d'une valeur? La fonction getResult()
ne devrait-elle pas attendre que la fonction myFun()
résolve sa valeur de promesse?
Si vous utilisez async/wait, tous vos appels doivent utiliser Promises ou async/wait. Vous ne pouvez pas obtenir comme par magie un résultat async d'un appel de synchronisation.
Votre dernier appel doit être:
getResult().then(response => console.log(response));
Ou quelque chose comme:
(async () => console.log(await getResult()))()
Il n'y a aucun intérêt à async et à attendre quand c'est le cas:
Promise.resolve(3).then(console.log); console.log(4);
4
3
En d'autres termes, puisque then () forks et s'exécute plus lentement que les instructions suivantes (même pour une promesse résolue), nous devons placer les instructions suivantes à l'intérieur de l'élément then, comme suit:
Promise.resolve(3).then(_ => { console.log(_); console.log(4); });
3
4
Et puisque c'est vrai, alors pourquoi se donner la peine d'attendre. Donc, je suis encore à voir pourquoi async et attendre existent même.