web-dev-qa-db-fra.com

fonction asynchrone - n'attend pas la promesse

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?

15
hg_git

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()))()
12
Ben Fortune

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.

0
ekerner