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

相关推荐
独孤九剑打醒他5 分钟前
【原创开源·修订版】源-栅-漏-栅-源横向双栅MOS:从“被误解的短路”到“电流路径多值逻辑与顶层供电架构”
前端·嵌入式硬件·架构·开源·硬件工程
创世虚拟世界13 分钟前
我做了一个 3D 虚拟世界基底,基于这个再做 3D 虚拟世界或者元宇宙,会事半功倍
javascript·人工智能·3d·gitee·虚拟现实
阿狗童鞋19 分钟前
React实战指南
前端·react.js·前端框架
v:ychya201840 分钟前
独立站外贸建站公司怎么选?建站就要建营销型网站
前端·php
春涧草茶43 分钟前
慢就是快12-12手动抛出异常
java·linux·前端
三小河1 小时前
从 Markdown 到 Generative UI:AI 如何从“生成答案”进化到“生成界面”?
前端·人工智能·后端
请为小H留灯1 小时前
Windows 本地前端项目一键运行指南:Volta+Node+pnpm + 阿里镜像完整初始化流程
前端·pnpm·node·js
J船长1 小时前
从 App 开发到 Unity 游戏开发:建立认知地图,结合 AI 开始实践
前端
Highcharts.js2 小时前
用Highcharts开发动态主从图表|双图联动的时间序列图表示例
javascript·数据库·信息可视化·highcharts·图表开发·动态图表