已合作成功的客户

遍及全国及海外

中国

杭州,绍兴,宁波,湖州,嘉兴,温州,台州,上海,北京,南京,苏州,常州,无锡,长沙,青岛,江西,台湾,南宁,海南,成都,哈尔滨,深圳,香港,沈阳 ...

海外

美国,加拿大,丹麦,澳大利亚,新加坡,法国,智利,日本,英国 ...

合作咨询

4001-355-360

洞见

news

洞察行业新闻,实时了解最新动态

async 与 await 的详解

作者:admin

来源:lanyunwork

时间:2025-11-20

分享到:

在定制网站开发中,它几乎是处理异步场景的首选(如接口请求、文件上传、本地存储读取等),以下从 核心定义、用法、原理、特性、实战场景 全方位详解:

一、核心定义:async 与 await 各司其职

async 和 await 必须 成对使用(await 不能单独存在),二者分工明确:

二、基本用法:从 Promise 到 async/await 的简化

先看一个 Promise 链式调用的例子(定制网站中常见的「获取用户信息 + 拉取用户订单」):

用 async/await 改写后,代码直接「线性同步化」,可读性大幅提升:

三、核心原理:async/await 如何工作?

async/await 本质是 Promise + 生成器(Generator) 的语法糖,底层没有新增异步机制,只是简化了 Promise 的使用:
  1. 当异步函数执行到 await 时,会 暂停当前函数的执行上下文,并将后续代码(await 之后的部分)包装成 Promise 的 then() 回调;
  2. 等待 await 后面的 Promise 状态改变(成功 / 失败);
  3. 若 Promise 成功,将结果作为 await 表达式的返回值,恢复函数执行;
  4. 若 Promise 失败,抛出错误,需用 try/catch 捕获,否则函数返回的 Promise 会变为 rejected
⚠️ 关键提醒:await 只会 暂停当前异步函数,不会阻塞整个 JS 线程(JS 仍是单线程,异步函数暂停时,主线程会继续执行其他同步代码)。

四、关键特性与实战技巧

1. 错误处理:try/catch 捕获所有异常

await 后的 Promise 若 rejected,会直接抛出错误,必须通过以下方式处理,否则会导致代码中断:
示例(定制网站「登录 + 存储用户信息」场景):

2. 并行执行:避免滥用 await 导致性能问题

若多个异步操作 无依赖关系(如同时拉取「产品列表」和「分类列表」),直接用 await 逐个执行会变成「串行」,浪费时间:

正确做法:用 Promise.all() 实现并行执行(总耗时 = 最长的单个请求时间):

其他并行工具:

3. await 可等待任意值(不止 Promise)

若 await 后面不是 Promise,会自动包装成「已 resolved 的 Promise」,返回该值本身:

4. 异步函数的几种写法

五、常见误区与避坑指南

  1. 在非 async 函数中使用 await → 语法错误!

忽略 fetch 的 404/500 状态码 → fetch 仅在「网络错误」时 reject,HTTP 错误(4xx/5xx)仍会 resolve,需手动判断 res.ok

  1. 滥用 await 导致串行阻塞 → 无依赖的异步操作必须用 Promise.all() 并行执行(参考「并行执行」部分)。
  2. await 后面的代码不会立即执行 → await 会暂停函数,直到 Promise 完成,后续代码属于「异步回调」:

  1. 未捕获的 await 错误 → 会导致异步函数返回的 Promise 变为 rejected,若未用 .catch() 捕获,会触发全局 unhandledrejection 事件,严重时导致页面崩溃。

六、定制网站中的典型应用场景

1. 接口请求与数据渲染(最常用)

2. 表单提交与异步验证

3. 文件上传(带进度提示)

七、总结:async/await 的核心优势

  1. 代码简洁:告别 Promise 链式调用的 .then() 嵌套,逻辑更清晰;
  2. 可读性高:异步代码像同步代码一样线性执行,降低理解成本;
  3. 错误处理友好:用 try/catch 统一捕获所有异步错误,比 Promise 的多个 .catch() 更直观;
  4. 调试方便:断点调试时,可按同步代码的逻辑逐步执行(无需跳转到 .then() 回调)。
在定制网站开发中,只要涉及异步操作(接口请求、文件处理、定时器等),async/await 几乎是最优选择,配合 Promise 工具函数(Promise.all() 等)可高效处理复杂异步场景。

 

 

业务咨询

微信咨询

请扫二维码
咨询项目经理

400电话

4001-355-360

获取方案

与蓝韵项目经理通话

请输入正确的手机号码格式

信息保护中请放心填写

在线咨询
 
提交成功
关闭浮窗