2017-08-25 164 views
7

我试图学习异步等待。在此代码 -异步函数 - 等待不等待承诺

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

为什么我收到输出 -

Promise { <pending> } 

而是一些价值? getResult()函数不应该等待myFun()函数解析它的promise值吗?

回答

8

如果您使用async/await,则您的所有呼叫必须使用Promises或异步/等待。你不能只是奇迹般地从同步调用中获得异步结果。

你最终需要将电话:

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

或者类似的东西:

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

为什么最后异步(带有IIFE)变为同步,但不是我的'的getResult()'方法? –

+0

@hg_git因为它被包装在一个异步IIFE中,有一个等待电话。它不会变成同步的,它只是语法上的糖。 –

+0

我的'getResult()'也有'async'关键字,还有'await'调用。 –