最佳答案
我读到用 async
关键字标记的异步函数隐式返回一个承诺:
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
但这是不连贯的... 假设 doSomethingAsync()
返回一个承诺,而且 wait 关键字将返回来自承诺的值,而不是承诺本身,那么我的 getVal 函数 应该返回该值,而不是隐式承诺。
到底是什么案子?用异步关键字标记的函数是隐式返回承诺,还是由我们控制它们返回什么?
也许如果我们不明确地返回一些东西,那么他们就暗示地返回一个承诺... ?
更明确地说,上述两者之间有一个区别
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
函数返回非承诺值时,它将强制将其包装在承诺中。
我对此没什么意见,但它确实违背了正常的 JS。