async/await 旨在让异步代码更接近同步逻辑,提升可读性与可维护性;async 函数自动返回 Promise,await 只能在 async 函数内使用,错误处理推荐 try/catch,需避免滥用 async 和顺序 await 并行请求。

JavaScript 中函数配合 async/await 并不是为了“简化函数返回”,而是让异步操作的写法更接近同步逻辑,提升可读性和可维护性。关键在于:函数本身需声明为 async,内部用 await 等待 Promise 完成,最终自动返回一个 Promise —— 你不用手动 return Promise.resolve(...),也不用嵌套 .then()。
async 函数自动返回 Promise
只要在函数声明前加 async,无论函数体是否含 await,它就一定会返回一个 Promise:
- 如果函数返回普通值(如字符串、数字),系统自动包装成
Promise.resolve(value) - 如果函数抛出错误,等价于返回
Promise.reject(error) - 如果函数中用了
await,执行会暂停直到 Promise settle,之后继续运行并按上述规则处理返回值
await 只能在 async 函数内使用
await 不是独立语句,它必须出现在 async 函数作用域中。常见错误是直接在顶层或普通函数里写 await fetch(...),会报语法错误。正确做法:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 把调用逻辑包进
async函数(如async function loadData() { ... }) - 或者用 IIFE:
(async () => { const data = await api(); console.log(data); })();
错误处理用 try/catch 更自然
相比链式 .catch(),async/await 允许用熟悉的 try/catch 捕获异步错误:
立即学习“Java免费学习笔记(深入)”;
-
try块中await任意 Promise,一旦 reject 就跳进catch - 可以统一处理多个异步步骤的错误,避免每个
.then()后跟一个.catch() - 注意:未被 catch 的错误仍会变成 Promise rejection,需确保上层有处理(如调用处用
.catch()或顶层try/catch)
避免常见误区
几个高频踩坑点:
-
不要滥用 async:纯同步函数加
async会多一层 Promise 包装,增加不必要的开销 - await 不阻塞线程:它只是暂停当前 async 函数的执行,JS 引擎可继续处理其他任务(如事件、定时器)
-
并行请求别顺序 await:需要同时发起多个请求时,先用
Promise.all([p1, p2, p3]),再await,而不是逐个await(否则变成串行)


















