首页 > web前端 > js教程 > 正文

javascript的async/await是什么_如何简化异步代码?

夜晨
发布: 2025-12-20 14:05:36
原创
689人浏览过
async/await 是 JavaScript 中基于 Promise 的异步语法糖,使异步代码更直观;async 函数自动返回 Promise,await 在其内部暂停执行并等待 Promise 完成,需用 try/catch 捕获错误,支持串行与并行控制,但不改变异步本质。

javascript的async/await是什么_如何简化异步代码?

async/await 是 JavaScript 中处理异步操作的语法糖,它让基于 Promise 的异步代码写起来像同步代码一样直观,大幅降低回调嵌套和错误处理的复杂度。

async 函数:自动返回 Promise 的函数

在函数声明前加 async 关键字,该函数就变成异步函数。它会自动把返回值包装成 Promise;即使你 return 一个普通值(比如 return 42),也会等价于 Promise.resolve(42)。如果函数中抛出错误,则等价于 Promise.reject(error)

  • 不能直接用 await 在普通函数或全局作用域中 —— 必须在 async 函数内部使用
  • async 函数本身不执行异步操作,只是提供 await 的执行环境

await:暂停执行,等待 Promise 完成

await 只能在 async 函数中使用,它会让 JS 引擎“暂停”当前函数的执行(实际是让出线程,不阻塞主线程),直到右侧的 Promise 被 fulfilled 或 rejected。之后继续执行后续语句。

  • const data = await fetch('/api/user').then(res => res.json()) → 简洁写法:const response = await fetch('/api/user'); const data = await response.json();
  • await 后面不一定是 Promise,也可以是任意值:非 Promise 值会被自动转为 Promise.resolve(value)
  • 错误需用 try/catch 捕获,因为 rejected 的 Promise 会以异常形式抛出

对比传统 Promise 链,更清晰的错误处理与流程控制

以前用 .then().catch() 容易出现“错误被吞掉”或多个 catch 分散的问题;而 async/await 把逻辑收束在统一的 try/catch 块里,条件分支、循环、重试逻辑也更容易组织。

Opus
Opus

AI生成视频工具

Opus 77
查看详情 Opus

立即学习Java免费学习笔记(深入)”;

  • 多个请求串行:await api1(); await api2(); await api3(); —— 顺序明确,无嵌套
  • 并行请求:const [a, b] = await Promise.all([fetchA(), fetchB()]);
  • 带错误重试:for (let i = 0; i setTimeout(r, 1000)); } }

注意点:不是万能银弹,仍需理解 Promise 本质

await 并不会让异步变同步,它只是语法层面的简化。底层仍是事件循环和微任务队列。滥用 await(比如本可并行却写成串行)反而会拖慢性能。

  • 避免在循环中无脑 await(除非真要串行)→ 考虑 Promise.allPromise.allSettled
  • await 后的 Promise 如果没被处理(没 try/catch),未捕获的 rejection 会触发 unhandledrejection 事件
  • 不要在 for-in / for-of 循环中直接 await 异步操作(除非有意串行);数组遍历时可用 map + Promise.all

以上就是javascript的async/await是什么_如何简化异步代码?的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号