asynchrone en fonction attendent pas d'attente pour la promesse
Je suis en train d'apprendre async-vous attendent. 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 suis-je sortie -
Promise { <pending> }
Au lieu de la valeur? Ne pas le getResult()
fonction d'attendre myFun()
fonction de résoudre la promesse de valeur?
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez async/await, tous vos appels utiliser des Promesses ou async/await. Vous ne pouvez pas tout comme par magie obtenir un async résultat de la synchronisation d'appel.
Votre dernier appel doit être:
Ou quelque chose comme:
getResult()
méthode?getResult()
aasync
mot-clé aussi bien, et unawait
appeler ainsi..getResult()
, c'est encore une promesse.await
"comme par magie" déballe une promesse avant le code suivant est exécuté. Le code regarde synchrone, mais il n'est pas exécuté en mode synchrone.Il n'y a pas de point de async et await lorsque c'est le cas réel:
En d'autres termes, depuis l'époque() fourches et s'exécute plus lentement que les déclarations qui ont suivi (même pour un résolus Promesse), alors nous avons besoin de mettre la les instructions suivantes à l'intérieur de l'époque, comme:
Et depuis c'est vrai, alors pourquoi s'embêter à attendre. Donc, Im encore à voir pourquoi async et await existent encore.
Ce que vous devez comprendre, c'est que async/await ne pas faire de votre code à exécuter de manière synchrone, mais nous allons vous écrire que si elle est:
En bref: La fonction avec async en face d'elle est littéralement exécutée de manière asynchrone, d'où le mot-clé "async". Et le "en attente de" mot-clé wil faire que la ligne qui l'utilise à l'intérieur de cette fonction async attendre une promesse au cours de son exécution. Ainsi, bien que la ligne d'attente, l'ensemble de la fonction est toujours exécutée de manière asynchrone, à moins que l'appelant de la fonction 'attend'...
Plus minutieusement expliqué: Quand vous mettez async en face d'une fonction, ce qui est réellement fait, c'est de faire revenir une promesse avec tout ce que cette fonction renvoie l'intérieur. La fonction s'exécute de façon asynchrone et lorsque l'instruction return est exécutée la promesse résout le retour de la valeur.
Sens, dans votre code:
La fonction "getResult()" sera de retour d'une Promesse qui permettra de résoudre une fois qu'il a fini de s'exécuter. Sorte que les lignes à l'intérieur de la getResult() la fonction sont exécutés de façon asynchrone, à moins que vous dire la fonction qui appelle getResult() à "attendre" pour elle aussi bien. À l'intérieur de la getResult() fonction que vous diront qu'il faut attendre le résultat, qui fait de l'exécution de getResult() attendre pour résoudre la promesse, mais l'appel de getResult() ne va pas attendre jusqu'à ce que vous dites le visiteur de 'attendre'.
Ainsi, une solution serait d'appeler soit:
Ou lors de l'utilisation dans une autre fonction que vous pouvez simplement utiliser 'attendre' de nouveau