当前位置: 首页 > news >正文

10个常见的async/await函数

大家好,我是宝哥

当谈到异步编程时,async/await是JavaScript中常用的功能之一。下面是10个常用的await和async函数示例,以及对它们的代码用途的解析:

1.异步获取数据

async function fetchData() {try {const response = await fetch('https://api.example.com/data');if (!response.ok) {throw new Error('Network response was not ok');}const data = await response.json();return data;} catch (error) {console.log('Error:', error);throw error;}
}

该函数使用await关键字等待异步请求返回的数据,并将其解析为JSON格式。这样,我们可以在代码中以同步的方式处理数据,而无需使用回调函数。

2.异步执行多个任务

async function performTasks() {const [result1, result2] = await Promise.allSettled([doTask1(), doTask2()]);console.log('Tasks completed:', result1, result2);
}

在这个例子中,我们使用await等待多个任务同时完成。Promise.all接收一个包含多个任务的数组,并返回一个新的Promise,直到所有任务都完成才会解析。

3.处理异步错误

async function fetchData() {try {const response = await fetch('https://api.example.com/data');if (!response.ok) {throw new Error('Network response was not ok');}const data = await response.json();return data;} catch (error) {console.log('Error:', error);throw error;}
}

在这个示例中,我们使用try/catch块来捕获可能出现的异步错误。如果发生错误,它将被捕获并打印出来,然后被重新抛出。

4.顺序执行异步任务

async function performTasks() {const result1 = await doTask1();const result2 = await doTask2();console.log('All tasks completed');
}

这个函数按照顺序执行两个异步任务,并在两个任务都完成后打印一条消息。

5.异步循环

async function processItems(items) {await Promise.allSettled(items.map(item => processItem(item)));console.log('All items processed');
}

在这个例子中,我们使用await在循环中处理每个项目。在处理完所有项目后,将打印一条消息。

6.延迟执行

function delay(ms) {return new Promise(resolve => setTimeout(resolve, ms));
}async function delayedTask() {console.log('Task started');await delay(2000);console.log('Task completed');
}

delay函数返回一个Promise,经过指定的延迟时间后解析。在delayedTask函数中,我们使用await让任务在经过2秒的延迟后才继续执行。

7.条件异步执行

async function performTask(condition) {if (condition) {await doTask1();} else {await doTask2();}console.log('Task completed');
}

在这个示例中,我们使用条件语句来决定要执行的异步任务。根据条件的不同,将执行不同的任务,并在任务完成后打印一条消息。

8.并行执行异步任务

async function performTasks() {const [result1, result2] = await Promise.allSettled([doTask1(), doTask2()]);console.log('Tasks completed:', result1, result2);
}

通过使用Promise.all和解构赋值,我们可以并行执行多个异步任务,并在它们都完成后获取结果。

9.处理多个并发请求

async function fetchData() {try {const [response1, response2] = await Promise.allSettled([fetch('https://api.example.com/data1'),fetch('https://api.example.com/data2')]);if (response1.status !== 200 || response2.status !== 200) {throw new Error('One or more network requests failed');}const [data1, data2] = await Promise.all([response1.value.json(),response2.value.json()]);console.log('Data fetched:', data1, data2);} catch (error) {console.log('Error:', error);throw error;}
}

在这个示例中,我们使用Promise.all来并发请求多个数据源,并等待它们的响应。一旦所有数据都被解析为JSON格式,我们就可以对其进行处理。

10.链式异步操作

async function performTasks() {try {const result1 = await doTask1();const result2 = await doTask2(result1);const result3 = await doTask3(result2);console.log('Tasks completed:',result1, result2, result3);} catch (error) {console.log('Error:', error);throw error;}
}

在这个示例中,我们使用.then方法将多个异步任务链接在一起。doTask1完成后,它的结果将传递给doTask2,然后再将结果传递给doTask3。最终的结果将在最后的.then块中获取并打印出来。

这些常用的await和async函数示例展示了在异步编程中如何使用它们。通过使用async/await,我们可以以更具可读性和简洁性的方式处理异步操作,并使代码结构更清晰。

相关文章:

  • Qt根据单价计算总价与进制转换
  • TCP之三次握手四次挥手与UDP区别
  • 机器学习算法汇总:人工神经网络、深度学习及其它
  • 【Python数据可视化】matplotlib之设置子图:绘制子图、子图共享x轴坐标、调整子图间距、设置图片大小
  • 数据可视化|Python之Pyecharts将“爬虫数据”绘制饼状图
  • vite和webpack的区别
  • cmake构建动态库实例(cmakelist)
  • 08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)
  • ES搜索的安装以及常用的增删改查操作(已经写好json文件,可以直接使用)
  • flutter base64图片保存到相册
  • 【别流口水】羡慕同学进了大厂核心部门,看懂这本书你也能行!
  • AI对决:ChatGPT与文心一言的比较
  • 如何使用服务器?
  • chrome 307状态码
  • 在Excel中如何打开VBA,这里提供两种方法
  • ES6指北【2】—— 箭头函数
  • 【5+】跨webview多页面 触发事件(二)
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • isset在php5.6-和php7.0+的一些差异
  • miaov-React 最佳入门
  • Otto开发初探——微服务依赖管理新利器
  • Protobuf3语言指南
  • Python - 闭包Closure
  • python3 使用 asyncio 代替线程
  • Vue 2.3、2.4 知识点小结
  • 浏览器缓存机制分析
  • 使用 QuickBI 搭建酷炫可视化分析
  • 我是如何设计 Upload 上传组件的
  • 一文看透浏览器架构
  • 正则表达式
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #Java第九次作业--输入输出流和文件操作
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (13)Hive调优——动态分区导致的小文件问题
  • (2)STL算法之元素计数
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (理论篇)httpmoudle和httphandler一览
  • (十五)使用Nexus创建Maven私服
  • (十一)c52学习之旅-动态数码管
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)winform之ListView
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net framework profiles /.net framework 配置
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET连接MongoDB数据库实例教程
  • .NET中的Exception处理(C#)
  • @Repository 注解
  • @SentinelResource详解
  • [ solr入门 ] - 利用solrJ进行检索
  • [2544]最短路 (两种算法)(HDU)
  • [4.9福建四校联考]