You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何异步代码只能由异步代码调用?请求详解深层原理

问题:为何异步代码必须由异步代码调用?

我理解async-await本质是基于Promises实现的,因此await之后的任何代码等同于then()中的回调函数。我也能直觉上理解,若将await之后的代码拆分为单独回调,其内部为何需要捕获之前的变量,但我不理解为何闭包要一直延伸至main函数?

核心解释

使用回调函数、Promises、async-await和生成器时,最终会将异步函数拆分为多个存放在堆中的闭包。函数会将最外层闭包传递给运行时。当事件循环或IO操作完成后,运行时会调用该闭包,程序从中断处继续执行。但这意味着调用栈中位于当前函数之上的所有函数都必须返回,整个调用栈仍需被展开。

这就是“红色函数只能由红色函数调用”规则的由来。你必须将整个调用栈全部闭包化,一直到main()或事件处理器。

内容的提问来源于Stack Exchange,提问作者Matt Styles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:44:53