2017-08-25 4 views
7

Ich versuche async-erwarten zu lernen. In diesem Code -Async-Funktion - warten Sie nicht auf Versprechen warten

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()); 

warum bekomme ich Ausgabe als -

Promise { <pending> } 

Statt einen Wert? Sollte nicht die getResult() Funktion auf myFun() Funktion warten, lösen Sie es Versprechen Wert?

Antwort

8

Wenn Sie async/await verwenden, müssen alle Ihre Anrufe Promises oder async/await verwenden. Sie können nicht einfach ein asynchrones Ergebnis von einem Synchronisierungsanruf erhalten.

Ihr letzter Aufruf muss sein:

getResult().then(response => console.log(response)); 

Oder so etwas wie:

(async() => console.log(await getResult()))() 
+0

warum letzter Asynchron (die mit IIFE) wird synchron, aber nicht meine 'getResult()' Methode? –

+0

@hg_git Weil es in einem asynchronen IIFE verpackt ist, mit einem Warteaufruf. Es wird nicht synchron, es ist nur syntaktischer Zucker. –

+0

mein 'getResult() 'hat' async' Schlüsselwort ebenso, und ein 'erwarten' Anruf ebenso. –

Verwandte Themen