async/await|JS同步写法解决异步终极方案

一、async/await 核心本质

async/await 不是新功能,是 Promise 的语法糖

  • async:修饰函数,标记该函数为异步函数,返回值自动包装为 Promise

  • await :等待 Promise 执行完毕,只能写在 async 函数内部

核心价值:异步任务、同步顺序执行,代码结构和普通同步逻辑完全一致。


二、基础语法使用

复制代码

// 1. 封装一个 Promise 异步任务 function delay(time, val) { return new Promise((resolve) => { setTimeout(() => { resolve(val); }, time); }); } // 2. async 函数 + await 等待结果 async function fn() { // 阻塞等待 Promise 执行完成,拿到结果 let res1 = await delay(1000, "第一步数据"); console.log(res1); let res2 = await delay(1000, "第二步数据"); console.log(res2); } fn();

执行顺序:从上到下,执行完上一个异步再走下一个,完全同步写法。


三、异步函数返回值特点

任何被 async 修饰的函数,返回结果一定是 Promise 对象。

复制代码

async function test() { return 666; } // 自动包装成 Promise test().then(res => console.log(res)); // 666


四、异常捕获 try / catch(必学)

await 遇到 Promise 失败(reject)会直接报错、终止代码。必须使用 try/catch 捕获异常。

复制代码

async function getData() { try { // 成功走这里 let res = await fetch("https://xxx/api"); console.log("请求成功", res); } catch (err) { // 失败、报错走这里 console.log("请求失败", err); } } getData();

工程规范:所有 await 业务代码,必须包裹 try/catch,防止页面逻辑崩掉。


五、串行异步(默认行为)

多个 await 默认 串行执行,上一个结束才执行下一个,适合有依赖顺序的接口。

复制代码

async function serial() { console.time("串行耗时"); await delay(1000, 1); await delay(1000, 2); await delay(1000, 3); console.timeEnd("串行耗时"); // 总耗时约 3000ms } serial();


六、并行异步(提升性能)

无依赖的异步任务,不要顺序等待!搭配 Promise.all 实现并行执行,大幅提速。

复制代码

async function parallel() { console.time("并行耗时"); // 先同时开启所有任务 const p1 = delay(1000, 1); const p2 = delay(1000, 2); const p3 = delay(1000, 3); // 统一等待结果 const res = await Promise.all([p1, p2, p3]); console.log(res); console.timeEnd("并行耗时"); // 总耗时约 1000ms } parallel();


七、开发核心注意要点

  • await 必须写在 async 函数内,普通函数直接报错

  • await 只能等待 Promise、不能等待普通值

  • 串行有顺序依赖,并行提升性能,根据业务场景选择

  • 所有异步请求必须 try/catch,统一异常处理

  • async/await 只是语法糖,底层依旧是 Promise

相关推荐
A24207349303 小时前
TCP 三次握手与四次挥手:从原理到状态机一次讲清
前端
GreenTea10 小时前
GrokBot 核心成员 Lauren Tan:每月交付 2000 个 PR 的人,是怎么用 AI 的
前端·后端·架构
mCell11 小时前
用 Knip 清理 AI Coding 留下的冗余代码
前端·ai编程·前端工程化
笃行35012 小时前
使用Rokid AIUI做了一个童年推箱子游戏
前端
excel13 小时前
前端加密的作用与使用场景
前端
计算机魔术师14 小时前
纽约时报版权诉讼披露:微软高管内部称训练 AI 是人类历史上最大规模劳动窃取
前端
去伪存真15 小时前
大模型的参数量为什么那么大?
前端·人工智能
IT_陈寒15 小时前
Java空指针这次真把我坑惨了
前端·人工智能·后端
高级程序源16 小时前
django大学生创新创业项目管理系统94923-计算机课程设计、毕业设计
javascript·vue.js·spring boot·后端·python·django·课程设计