我读到用async
关键字标记的异步函数隐式返回一个promise:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
但这并不连贯...假设doSomethingAsync()
返回一个诺言,而await关键字将从诺言中返回值,而不是诺言itef,那么我的getVal函数应该返回该值,而不是隐式诺言。
那到底是什么情况?用async关键字标记的函数是隐式返回promise还是控制它们返回的内容?
也许,如果我们不明确地返回某些东西,那么他们会隐式地返回一个诺言...?
更清楚地说,上述内容与
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
在我的提要中,该行为的确与传统的return语句不一致。似乎当您从async
函数显式返回非承诺值时,它将强制将其包装在Promise中。我没有什么大问题,但确实违背了普通的JS。
console.log
节目?