मैंने पढ़ा कि async
कीवर्ड द्वारा चिह्नित async फ़ंक्शंस एक वादा वापस करते हैं:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
लेकिन वह सुसंगत नहीं है ... doSomethingAsync()
एक प्रतिज्ञा मानकर , और प्रतीक्षित कीवर्ड वादा से मूल्य लौटाएगा, न कि वादा itsef, तो मेरे getVal फ़ंक्शन को उस मूल्य को वापस करना चाहिए , न कि एक अंतर्निहित वादा।
तो वास्तव में मामला क्या है? क्या एसिंक्स कीवर्ड द्वारा चिह्नित कार्य निहित रूप से वापसी के वादे हैं या क्या हम नियंत्रित करते हैं कि वे क्या लौटाते हैं?
शायद अगर हम स्पष्ट रूप से कुछ वापस नहीं करते हैं, तो वे स्पष्ट रूप से एक वादा वापस करते हैं ...?
अधिक स्पष्ट होने के लिए, उपरोक्त और के बीच अंतर है
function doSomethingAync(charlie) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(charlie || 'yikes');
}, 100);
})
}
async function getVal(){
var val = await doSomethingAync(); // val is not a promise
console.log(val); // logs 'yikes' or whatever
return val; // but this returns a promise
}
var ret = getVal();
console.log(ret); //logs a promise
मेरे सारांश में व्यवहार वास्तव में पारंपरिक रिटर्न स्टेटमेंट के साथ असंगत है। ऐसा प्रतीत होता है कि जब आप किसी async
फ़ंक्शन से स्पष्ट रूप से एक गैर-वादा मूल्य वापस करते हैं, तो यह उसे एक वादा में लपेट देगा। मैं इसके साथ एक बड़ी समस्या नहीं है, लेकिन यह सामान्य जेएस की अवहेलना करता है।
console.log
दिखाता है?