async函数使函数自动返回Promise,普通返回值等同于Promise.resolve()。await仅在async函数内使用,暂停执行但不阻塞主线程,等待Promise完成后继续。异步逻辑可顺序书写,避免嵌套回调。调用async函数需用.then()或await获取结果,顶层await需模块环境支持。
async 函数会自动返回一个 Promise,哪怕你只是 return 一个普通值,效果也等同于 Promise.resolve()。而 await 只能在 async 函数内部使用,它会暂停当前函数的执行——注意,只是暂停这一小段逻辑,并不会阻塞主线程——等那个 Promise 完成之后,再继续往下走。

先说说 async 这个关键字。它本身不会改变函数内部的同步执行顺序,但会做两件关键的事:一是让函数自动返回一个 Promise,二是允许你在函数体内使用 await 来暂停等待异步操作。这两点看起来简单,实际编码时很容易忽略其中的细节。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
给函数加上 async 之后,哪怕你只是 return 一个普通值,比如 return 42,实际返回的也已经是一个已 resolve 的 Promise 了。具体表现如下:
async function f() { return 42; } → 调用 f() 返回的是 Promise.resolve(42),而不是数字 42Promise.reject(error),不需要手动 catch 包装只有进了 async 函数这道门,你才能合法使用 await。它的作用很简单:暂停当前 async 函数的执行(注意,并不阻塞主线程),等右侧的 Promise 状态 settled 之后,再继续执行后面的代码。
await fetch('/api') 会等网络请求完成,再往下走;如果请求失败,它会抛出异常,可以用 try/catch 捕获Promise.resolve(value)async 函数仍然是同步开始执行的。函数体第一行代码(比如 console.log)会立即执行,不会等到你调用它才跑。只是遇到 await 的时候,才会“让出”控制权。
console.log("start"))仍然立即执行.then() 或者在外面再用 await 来处理返回的 Promise,不能直接拿返回值因为 await 只能在 async 函数里用,所以如果你在模块最外层直接写 await fetch('/data'),会报错。有两种常见解法:
await fetch('/data');(直接写在 script 最外层会报错)(async () => { const res = await fetch('/data'); })();await fetch('/data');这几条规则看起来不复杂,但实际编码时很容易忽略——尤其是忘记 async 函数返回值已经变成了 Promise,以及调用时忘了用 await 或 then 来获取结果。从实践经验来看,大部分新手容易出错的地方正是这两个方面。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述