我读到由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。