2017-08-25 249 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'調用。 –