Asynchronous 为什么函数必须异步才能在其中使用wait?

Asynchronous 为什么函数必须异步才能在其中使用wait?,asynchronous,async-await,Asynchronous,Async Await,如果我想等待一个函数,为什么必须只在异步函数中完成 如果我有这个: Function myFunc() { return await myOtherFunc(); } 我得到一个错误,它说:“wait表达式只允许在异步函数中使用。” 我可以理解myOtherFunc()是否必须是异步的(等待异步函数是没有意义的),但是为什么它关心调用函数是否是异步的呢。由于对异步函数的调用,可以在同步函数内的进程中使用fork,对吗?那么为什么不能在同步函数中等待异步函数呢 注意:我的问题不是重复的

如果我想等待一个函数,为什么必须只在异步函数中完成

如果我有这个:

Function myFunc() {
    return await myOtherFunc();
}
我得到一个错误,它说:“wait表达式只允许在异步函数中使用。”

我可以理解myOtherFunc()是否必须是异步的(等待异步函数是没有意义的),但是为什么它关心调用函数是否是异步的呢。由于对异步函数的调用,可以在同步函数内的进程中使用fork,对吗?那么为什么不能在同步函数中等待异步函数呢

注意:我的问题不是重复的


^这个问题是问如果异步函数中没有使用wait,会发生什么情况。我在问为什么函数必须是异步的才能使用wait。下面我对DougBug的回应解释了它们的不同之处。

下面文章中的图片可能有助于向您解释这一点

不过基本思想是,
async
关键字允许函数将其执行交给调用函数


因此,任何实现wait的函数都必须标记为async,这样它就可以遍历调用路径,直到第一个调用方只等待它完成它需要做的事情。

可能重复的bug。那篇文章准确地回答了我的问题。我没有意识到等待操作符将控制权返回给调用函数。这在同步函数中是不可能的,对吗?是的,在堆栈中产生控制需要特殊的情况。