什么是async和await?

简介: 什么是async和await?

async 和 await 是 JavaScript(特别是 ES2017 及更高版本)中用于处理异步操作的关键字。它们使得异步代码看起来、写起来更像同步代码,从而提高了代码的可读性和可维护性。


async

async 是一个函数修饰符,用于声明一个函数是异步的。一个 async 函数总是返回一个 Promise。如果函数返回一个非 Promise 值,JavaScript 会自动将其包装在一个 Promise 中。


示例:


async function exampleAsyncFunction() {  
  return "Hello, Async!";  
}  
 
exampleAsyncFunction().then(result => console.log(result)); // 输出 "Hello, Async!"

await

await 是一个操作符,它只能在 async 函数内部使用。await 会暂停 async 函数的执行,并等待 Promise 解决(resolve)或拒绝(reject),然后恢复 async 函数的执行并返回解决的值。如果 Promise 被拒绝,await 表达式会抛出一个错误。


示例:


async function fetchData() {  
  let response = await fetch('https://api.example.com/data');  
  let data = await response.json();  
  return data;  
}  
 
fetchData().then(data => console.log(data)).catch(error => console.error(error));

在这个例子中,fetch 函数返回一个 Promise,我们使用 await 等待这个 Promise 解决,然后获取返回的响应对象。接着,我们使用 response.json() 方法(也返回一个 Promise)来获取 JSON 数据,并再次使用 await 等待这个 Promise 解决。最后,我们返回获取到的数据。


注意事项

  • await 只能在 async 函数内部使用。
  • await 会暂停 async 函数的执行,但不会阻塞整个线程或进程。JavaScript 仍然是单线程的,但 await 允许其他代码(如事件监听器或定时器回调)在 await 等待期间运行。
  • 如果在 async 函数外部使用 await,会导致语法错误。
  • 使用 try...catch 来捕获 await 表达式可能抛出的错误是一个好习惯。


相关文章
|
3月前
|
存储 人工智能 运维
3 人团队零推广获 1.2 万用户:Matrees 如何用 OSS 向量 Bucket 低成本构建 AI 创作平台
Matrees 是 Z 世代创作者的 AI 虚拟世界平台,3 人团队几乎零推广获取 1.2 万用户。依托阿里云 OSS Vector Bucket 实现全托管向量检索,成本降 90%,让创作者专注构建虚拟世界。
428 1
|
3月前
|
人工智能 JSON API
AI Agent 完全入门:从“大模型”到“能干活”的智能体,一篇讲透
本文深入浅出解析AI Agent本质:非 merely 工具调用,而是“感知-规划-记忆-工具”四层闭环的行动系统。对比普通大模型“只生成答案”,Agent能自主拆解目标、多步执行任务。聚焦测试场景,详解其在自动生成数据、UI自愈、智能断言三大落地点的实效价值。
|
3月前
|
人工智能 安全 IDE
OpenCode 内置工具大全:glob、grep、edit、bash 等 10+ 工具的实战用法
本文深度解析OpenCode——一款终端优先的AI编程Agent,对比Copilot等问答式工具,揭示其“代理式”本质:直接读写文件、执行命令、自动验证。拆解glob/grep/edit/bash等10+内置工具设计逻辑,并通过真实重构案例,展现AI如何安全、闭环地操作代码库。
|
3月前
|
人工智能 JSON 测试技术
Skill 不是脚手架:读懂 SKILL.md 和仓库结构的正确姿势
本文剖析Skill本质:它不是“超级提示词模板”,而是Agent时代的可复用、可组合、可演进的能力单元。SKILL.md实为接口定义文件,需遵循元数据驱动、渐进式披露、目录分层设计。错误做法是堆砌600行“全能脚本”,正确路径是拆解为专注单一职责的轻量Skill——小粒度、高复用、易维护。
|
测试技术 Python
将秒换算成时、分、秒
本文介绍了使用Python将总秒数转换为小时、分钟和秒的格式的方法,包括定义转换函数和格式化输出函数,并提供了完整的代码实现及测试用例,帮助用户更友好地展示时间信息。
1169 59
|
Cloud Native 安全 Java
铭师堂的云原生升级实践
铭师堂完整经历了云计算应用的四个关键阶段:从”启动上云”到”全量上云”,再到”全栈用云”,最终达到”精益用云”。通过 MSE 云原生网关的落地,为我们的组织带来了诸多收益,SLA 提升至100%,财务成本降低67%,算力成本降低75%,每次请求 RT 减少5ms。
铭师堂的云原生升级实践
|
前端开发 JavaScript API
React 文件下载组件 File Download
本文介绍了在React中实现文件下载组件的方法,包括使用`a`标签和JavaScript动态生成文件,解决了文件路径、文件类型、大文件下载及文件名乱码等问题,并展示了使用第三方库`file-saver`和生成CSV文件的高级用法。
574 6
|
JavaScript
Vue3描述列表(Descriptions)
该组件库包含 `Descriptions` 和 `DescriptionsItem` 两种组件,需配合使用。`Descriptions` 用于构建描述列表,提供标题、操作区、边框、垂直布局等配置;`DescriptionsItem` 作为列表项,可自定义标签和内容样式。支持响应式布局,并集成了多个实用工具函数,如节流、事件监听等。可通过属性灵活调整列表样式与布局。
1158 3
Vue3描述列表(Descriptions)
Java系列之 重命名文件/图片,renameTo() 方法的使用
这篇文章介绍了Java中File类的renameTo()方法,包括其使用方式、参数、返回值以及一些使用时的注意事项,并通过示例代码演示了如何使用该方法来重命名文件。
Java系列之 重命名文件/图片,renameTo() 方法的使用
|
JSON JavaScript 数据格式
Vue路由params、query参数丢失解决
该文章介绍了在Vue中使用`params`和`query`进行路由参数传递时,如何通过`sessionStorage`或`localStorage`解决参数丢失的问题。
1161 3