我读到了
async
关键字隐式返回承诺:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
但这不是连贯的…假设
doSomethingAsync()
返回一个promise,await关键字将从promise返回值,而不是promise itsef,然后返回my getVal函数
应该
返回那个值,而不是一个隐含的承诺。
那么到底是什么情况?async关键字标记的函数是否隐式返回承诺,或者我们是否控制它们返回的内容?
也许如果我们不明确地返回某个东西,那么他们就隐式地返回一个承诺。。。?
更清楚地说,上面和
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
在我的概要中,这种行为确实与传统的返回语句不一致。当您显式地从
异步
函数,它将强制将其包装在一个承诺中。
我没有什么大问题,但它确实违背了正常的JS。