21

नीचे दिए गए उदाहरण में के रूप में एक साधारण कॉलबैक का उपयोग करते समय:वापस कॉलबैक के लिए "प्रतीक्षा" कैसे करें?

test() { 
    api.on('someEvent', function(response) { 
    return response; 
    }); 
} 

कैसे समारोह async/इंतजार उपयोग करने के लिए बदला जा सकता है? विशेष रूप से, यह सोचते हैं 'someEvent' एक बार कहा जा गारंटी है और केवल एक बार, मैं समारोह परीक्षण एक async समारोह जो वापस नहीं करता है जब तक कॉलबैक निष्पादित किया जाता है होना चाहते हैं जैसे:

async test() { 
    return await api.on('someEvent'); 
} 
+0

बस संदर्भ के लिए, ES7/ES2016 विशिष्टता को अंतिम रूप दिया गया है और इसमें एसिंक/प्रतीक्षा शामिल नहीं है। फिलहाल यह सिर्फ एक [चरण 3 प्रस्ताव] है (https://github.com/tc39/ecma262#current-proposals)। –

+0

वैसे यह आश्चर्यजनक है - इसमें बहुत उम्मीद है कि इसमें शामिल हो! @DanPrince – sean2078

+1

जानकारी के लिए धन्यवाद तथ्य यह है कि ES2015 और ES6 एक ही चीज़ हैं जो भ्रम पैदा कर सकती हैं, लेकिन यह ध्यान दिया जाना चाहिए कि ES7 ES2016 के साथ अंतर-परिवर्तनीय नहीं है। ES2016 एक सफल तथ्य है। ईएस 7 डब्ल्यूआईपी है। – estus

उत्तर

37

async/await नहीं है जादू। एक async फ़ंक्शन एक ऐसा फ़ंक्शन है जो आपके लिए वादे को खोल सकता है, इसलिए आपको काम करने के लिए वादा वापस करने के लिए api.on() की आवश्यकता होगी। कुछ इस तरह:

function apiOn(event) { 
    return new Promise(resolve => { 
    api.on(event, response => resolve(response)); 
    }); 
} 

फिर

async function test() { 
    return await apiOn('someEvent'); // await is actually optional here 
             // you'd return a Promise either way. 
} 

लेकिन वह भी एक झूठ है, क्योंकि async कार्य भी वादे खुद को लौटने के लिए, ताकि आप वास्तव में test() से लाभ प्राप्त करने के लिए नहीं जा रहे हैं , बल्कि, एक मूल्य के लिए एक वादा, जिसका आप उपयोग कर सकते हैं:

async function whatever() { 
    // snip 
    const response = await test(); 
    // use response here 
    // snip 
} 
+1

मेरे पास संपादित करने की कोशिश करने में बहुत भाग्य नहीं था, लेकिन 'test()' फ़ंक्शन में कोई गलती है। यह 'इंतजार कर रहा है' ('someEvent') 'का इंतजार करना चाहिए और' api.on ('someEvent') का इंतजार नहीं करना चाहिए। 'Test()' फ़ंक्शन 'api.on' के आस-पास नव निर्मित वादे रैपर को कॉल करने के लिए है, इसे सीधे कॉल नहीं कर रहा है। – kylethebaker

+0

इस उत्तर ने मेरा दिन बचाया! – karthikeayan

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

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