2017-08-25 9 views
7

के लिए प्रतीक्षा न करने का इंतजार कर रहा हूं, मैं async-await सीखने की कोशिश कर रहा हूं। इस कोड में -async फ़ंक्शन - वचन

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() फ़ंक्शन के लिए प्रतीक्षा करें, यह आपके वादे मूल्य को हल नहीं करता है?

उत्तर

8

यदि आप async/await का उपयोग कर रहे हैं, तो आपके सभी कॉलों को वादा या async/प्रतीक्षा का उपयोग करना होगा। आप केवल सिंक कॉल से एसिंक परिणाम प्राप्त नहीं कर सकते हैं।

आपकी अंतिम कॉल करने की जरूरत है:

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

या कुछ की तरह:

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

क्यों पिछले async (Iife के साथ) तुल्यकालिक हो जाता है, लेकिन नहीं मेरी 'getResult()' विधि? –

+0

@hg_git क्योंकि यह एक प्रतीक्षा कॉल के साथ एक async IIFE में लपेटा गया है। यह तुल्यकालिक नहीं बनता है, यह सिर्फ वाक्य रचनात्मक चीनी है। –

+0

मेरे 'getResult()' में 'async' कीवर्ड भी है, और एक 'प्रतीक्षा' कॉल भी है .. –

संबंधित मुद्दे