async/await 隐式返回 promise?
我读到由关键字标记的异步函数隐式返回一个 promise:async
async function getVal(){
return await doSomethingAync();
}
var ret = getVal();
console.log(ret);
但这是不连贯的...假设返回一个 promise,并且 await 关键字将返回 promise 中的值,而不是 promise itsef,那么我的 getVal 函数应该返回该值,而不是隐式 promise。doSomethingAsync()
那么究竟是什么情况呢?由 async 关键字标记的函数是隐式返回 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
在我的概要中,这种行为确实与传统的返回语句不一致。看起来,当您从函数显式返回非 promise 值时,它将强制将其包装在 promise 中。我没有大问题,但它确实违背了正常的JS。async