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)
Promise.reject(error)
只有在 async 函数内部,才能合法使用 await。它会暂停当前 async 函数的执行(但不阻塞主线程),等待右侧 Promise settle 后继续:
await fetch('/api') 会等网络请求完成,再往下走Promise.resolve(value))async 函数仍是同步开始执行的(函数体第一行立刻运行),只是遇到 await 才“让出”控制权:
.then() 或 await 处理返回的 Promise,不能直接取返回值因为 await 只能在 async 函数里用,所以想在模块最外层等待异步操作,需包一层 async IIFE 或启用 top-level await(ES2022+,仅限模块环境):
await fetch('/data');(直接写在 script 最外层会报错)(async () => { const res = await fetch('/data'); })();
await fetch('/data');