我读到由async
关键字标记的异步函数隐式返回一个Promise:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
但这不是连贯的......假设doSomethingAsync()
返回一个Promise,并且 await 关键字将从Promise中返回值,而不是Promise本身,那么我的 getVal 函数应该返回该值,而不是隐含的Promise。
那么具体是怎么回事呢?由 async 关键字标记的函数是隐式返回Promise还是我们控制它们返回的内容?
也许如果我们不明确返回某些东西,那么它们会隐含地返回一个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值时,它会强制将其包装在一个Promise中。我对它没有什么大问题,但它确实无视普通的 JS。