异步处理方案

目录

1.通过promise的链式调用将异步方法变为同步执行

2.使用async及await

3.回调函数方式

4.三种方式对比

 5.async及await使用的注意点


1.通过promise的链式调用将异步方法变为同步执行

function get1(){return new Promise((resolve,reject) =>{console.log('执行get1接口逻辑')setTimeout(() =>{if(flag.value){resolve('get1接口执行完成')}else{reject('get1接口执行失败')}},3000)})}function get2(){return new Promise((resolve,reject) =>{console.log('执行get2接口逻辑')setTimeout(() =>{if(flag.value){resolve('get2接口执行完成')}else{reject('get2接口执行失败')}},2000)})}
function get3(){return new Promise((resolve,reject) =>{console.log('执行get3接口逻辑')setTimeout(() =>{if(flag.value){resolve('get3接口执行完成')}else{reject('get3接口执行失败')}},2000)})}
function get4(){return new Promise((resolve,reject) =>{console.log('执行get4接口逻辑')setTimeout(() =>{if(flag.value){resolve('get4接口执行完成')}else{reject('get4接口执行失败')}},2000)})}
// 进行get1-get4方法的顺序执行
get1()
.then(res=>{console.log(res);return get2()
})
.then(res=>{console.log(res);return get3()
})
.then(res=>{console.log(res);return get4()
})
.then(res=>{console.log(res);
})

执行结果:

2.使用async及await

function get1(){return new Promise((resolve,reject) =>{console.log('执行get1接口逻辑')setTimeout(() =>{if(flag.value){resolve('get1接口执行完成')}else{reject('get1接口执行失败')}},3000)})}function get2(){return new Promise((resolve,reject) =>{console.log('执行get2接口逻辑')setTimeout(() =>{if(flag.value){resolve('get2接口执行完成')}else{reject('get2接口执行失败')}},2000)})}
function get3(){return new Promise((resolve,reject) =>{console.log('执行get3接口逻辑')setTimeout(() =>{if(flag.value){resolve('get3接口执行完成')}else{reject('get3接口执行失败')}},2000)})}
function get4(){return new Promise((resolve,reject) =>{console.log('执行get4接口逻辑')setTimeout(() =>{if(flag.value){resolve('get4接口执行完成')}else{reject('get4接口执行失败')}},2000)})}async function get(){//使用await可以让异步操作进行同步执行const result1 =  await get1();console.log(result1)const result2 =  await get2();console.log(result2)const result3 =  await get3();console.log(result3)const result4 =  await get4();console.log(result4)
}
get()

执行结果:

await只能在async修改的异步函数中进行使用。 

3.回调函数方式

使用较少,多级回调导致函数难以理解。

4.三种方式对比

 

 5.async及await使用的注意点

①下面的示例中第一个任务执行完成之后才能执行第二个任务。

更高效的做法是将所有的Promise用Promise.all组合起来,然后再去await,这样会提高运行效率,如下:

 ②在循环中执行异步操作,不能直接调用forEach及map方法,尽管在回调函数中写了await,这里的forEach会立即返回,不会暂停等到所有的异步操作都执行完成。如下:

如果希望循环中的异步操作都一一执行完成之后才继续执行 ,可以使用传统的for循环,如下:

 如果想要循环中的所有操作都并发执行,这里的for循环会等到所有的异步函数执行完成之后才执行后面的处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/312955.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速上手:探索Spring MVC的学习秘籍!

SpringMVC概述 1,SpringMVC入门案例1.2 案例制作步骤1:创建Maven项目步骤2:补全目录结构步骤3:导入jar包步骤4:创建配置类步骤5:创建Controller类步骤6:使用配置类替换web.xml步骤7:配置Tomcat环境步骤8:启动运行项目步骤9:浏览器访问步骤10:修改Controller返回值解…

Goodbye2023, Hello 2024!

2023的所有比赛结束了,以后 xcpc 相关的比赛应该都和我没啥关系了,可能只打打蓝桥天梯了,等到明年的时候估计很多算法的东西也都忘记了吧,彻底退休了。打铁人不配叫退役,也不敢公开这篇文章,只敢在没人看的…

操作系统(Operator System)

这里写目录标题 1. 什么是操作系统2. 主要功能3. 计算机的层状结构4. 什么叫做管理5. 总结6. 为什么要有操作系统7. 最后 1. 什么是操作系统 操作系统(英语:Operating System,缩写:OS)是一组主管并控制计算机操作、运…

解决相机库CameraView多滤镜拍照错乱的BUG (一) : 复现BUG

1. 前言 这段时间,在使用 natario1/CameraView 来实现带滤镜的预览、拍照、录像功能。 由于CameraView封装的比较到位,在项目前期,的确为我们节省了不少时间。 但随着项目持续深入,对于CameraView的使用进入深水区,逐…

电缆厂 3D 可视化管控系统 | 图扑数字孪生

图扑软件(Hightopo)专注于 Web 的 2D&3D 可视化,自主研发 2D&3D 图形渲染引擎、数据孪生应用开发平台和开发工具,广泛应用于 2D&3D 可视化、工业组态与数字孪生领域,图扑软件为工业物联网、楼宇、场馆、园区、数据中心、工厂、电…

Python魔法方法之__getattr__和getattribute

在Python中有这两个魔法方法容易让人混淆:__getattr__和getattribute。通常我们会定义__getattr__而从来不会定义getattribute,下面我们来看看这两个的区别。 __getattr__魔法方法 class MyClass:def __init__(self, x):self.x xdef __getattr__(self, …

2023-12-12LeetCode每日一题(下一个更大元素 IV)

2023-12-12每日一题 一、题目编号 2454. 下一个更大元素 IV二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数,你必须找到对应元素的 第二大 整数。 如果 nums[j] 满足以下条件,那…

【年度征文】回顾2023,迎接2024

转眼一年~~2023又到年底了,CSDN年度征文如约而至!不知不觉又在CSDN平台写了488篇博文,非常感谢CSDN提供的平台,同时也感谢关注和支持博主的粉丝们,在马上到来新的一年里,我会继续努力!也非常感谢…

RocketMQ(Linux版本5.1.4)

1、停止之前的运行服务 [roottssvr1-c1 rocketmq-all-4.7.0-bin-release]# sh bin/mqshutdown namesrv No mqnamesrv running. [roottssvr1-c1 rocketmq-all-4.7.0-bin-release]# [roottssvr1-c1 rocketmq-all-4.7.0-bin-release]# [roottssvr1-c1 rocketmq-all-4.7.0-bin-r…

数据结构期末复习(2)链表

链表 链表(Linked List)是一种常见的数据结构,用于存储一系列具有相同类型的元素。链表由节点(Node)组成,每个节点包含两部分:数据域(存储元素值)和指针域(指…

数字集成系统设计——逻辑综合

目录 一、概述 1.1 综合的分类 1.2 逻辑综合的基本架构 1.3 逻辑综合的内部流程 1.3.1 RTL代码转译(Translation) 1.3.2 逻辑级优化(Optimization) 1.3.3 工艺映射(Mapping) 二、优化策略 2.1 资源…

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(三)

Matplotlib绘图技巧(三) 写在前面7. 雷达图7.1 圆形雷达图7.2 多边形雷达图 8. 极坐标图 subplot9. 折线图 plot10. 灰度图 meshgrid11. 热力图11.1 自定义colormap 12. 箱线图 boxplot 写在前面 终于更新完Matplotlib绘图技巧的全部内容,有…