我读到了使用 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
在我的摘要中,这种行为确实与传统的返回语句不一致。当您从async
函数明确返回非Promise值时,它似乎会强制将其包装成Promise。
我对此没有太大问题,但它确实违反了正常的JS行为。
console.log
显示什么? - Barmar