2 回答
TA贡献1858条经验 获得超8个赞
异步函数会返回一个 Promise,即使您没有在代码中定义 Promise。
我认为在等待语句中的所有承诺都得到解决后,这个返回的承诺就得到了履行。
我在下面的代码中测试它,它还返回 Promise,只有在所有 Promise 解决后(在本例中为 3000 毫秒后)才会实现:
async function print2() {
await console.log("abc")
await new Promise((res, rej) => {
setTimeout(() => {res(33)},3000)
})
await new Promise((res, rej) => {
setTimeout(() => {res(33)},50)
})
}
TA贡献1810条经验 获得超4个赞
您可以说一个空函数本身返回undefined(实际上不返回任何内容)。看看下面的示例;
function print() {}
var returnVal = print(); // undefined
你会注意到那returnVal是undefined.
现在,如果我们有一些东西在body那里test(),但你仍然没有传递任何返回值,那么returnVal仍然会是undefined。
function print() {
console.log('abc');
}
var returnVal = print(); // undefined
因此,为了让函数有返回值,我们只需要return它即可。
function print() {
console.log('abc');
return 1;
}
var returnVal = print(); // 1
当您将其转换为异步函数时。
异步函数的主体可以被认为是被零个或多个等待表达式分割。顶级代码,直到并包括第一个等待表达式(如果有),都是同步运行的。这样,没有await表达式的异步函数将同步运行。但是,如果函数体内有await 表达式,则异步函数将始终异步完成。
每个await 表达式之后的代码可以被认为存在于.then 回调中。通过这种方式,通过函数的每个可重入步骤逐步构建承诺链。返回值构成了链中的最后一个环节。
现在,根据上述信息,以下是我们所知道的与您的问题相关的信息;
你
print()
没有返回任何东西,这应该是undefined
async 函数将异步完成,这意味着它将始终返回Promise。待定、已履行或已拒绝
所以,在你的问题中说一下,这就是你的函数实际上所做的事情;
async function print() {
console.log("abc"); // Prints 'abc'
}
// Function above is equivalent to;
function printEquivalentInNonAsync() {
console.log("abc"); // Prints 'abc'
}
var returnVal = print(); // `returnVal` is `undefined`
并且,回答你的问题
如果没有等待,那么为什么会执行console.log?
无论等待异步函数,它仍然会执行!-等待只是为了确保停止行执行,直到异步函数(Promise)达到已完成或已拒绝。请注意,Promise 的第一个状态是pending。
添加回答
举报