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

项目中async和await的应用场景

        前言:在vue项目开发时,async和await这两个关键字,是绕不开的,因此我们必须要懂得什么情况下要使用这两个关键字,并解决遇到的问题。

目录

1、不使用这两个关键字,可能存在的问题

2、使用await和async解决上述问题

3、使用async和await这两个关键字时,需要注意的事项


1、不使用这两个关键字,可能存在的问题

        问题描述:如下面的代码,我们一开始定义allDept为空。在selectDeptCategory方法中,发送了一个axios异步请求,并给allDept赋值。由于axios异步请求是异步的,因此导致下面的JS代码不会等请求执行完毕再执行。说人话就是,我们在下面的selectDept 方法中访问allDept时,可能axios异步请求还没执行完毕,就会导致allDept还没被赋值,而是仍然为空。此时我们就无法使用allDept完成后续操作。

//某个科室分类下的,所有科室【对象数组】
let allDept = ref()

//选择科室分类后,查询旗下的科室
const selectDeptCategory = (value) => {
  //value是指我们选择的那个label的value值,如:外科的值是1,内科的值是2。
  //alert(value);
  //根据科室分类id,查询旗下所有的科室
  queryAllDeptByCategoryId(value).then(res => {
    //alert(JSON.stringify(res.data));
    allDept.value = res.data
  })
}

//选择科室后,获取当前所选科室的缩写
const selectDept = (value) => {
  //alert(value);//value是当前选中的科室的id值
  //根据科室id,算出所选科室在科室数组的下标为id-1,然后就可以在科室数组中查找该科室的科室缩写
  const selectedDept = allDept[value-1]
  alert(selectedDept.deptCode)  
}

2、使用await和async解决上述问题

        上述改进:使用await等待异步请求执行完毕,再将后端响应结果赋值给res,然后再将res的数据部分data(这个data就是我们所需的对象数组)赋值给allDept。

        这样一来,就解决了下面访问allDept为空的BUG。

        而且这样一看,更像同步代码(本质还是异步代码,但更顺眼、更符合我们写同步代码的逻辑)。      

         展示代码修改后的效果:

 

3、使用async和await这两个关键字时,需要注意的事项

        因为我们使用await来等待异步请求的执行结果,因此这个异步请求就有可能会报错,因此我们必须捕获这个可能会发生的错误,如下:

 

相关文章:

  • PHPCMS V9 登录加密改造
  • 【redis】应用场景:共享会话和手机验证码
  • Quickwit+Jaeger+Prometheus+Grafana搭建Java日志管理平台
  • 使用AI一步一步实现若依前端(7)
  • Flutter 基础组件 Text 详解
  • 工作记录 2017-01-05
  • 算法面试题深度解析:LeetCode 2012.数组元素的美丽值求和计算与多方案对比
  • 【深度学习】读写文件
  • LiveGBS流媒体平台GB/T28181常见问题-视频流安全控制HTTP接口鉴权勾选流地址鉴权后401Unauthorized如何播放调用接口流地址校验
  • Web开发-PHP应用TP框架MVC模型路由访问模版渲染安全写法版本漏洞
  • echarts geo3D地图标记点自定义照片
  • Android StrictMode 使用与原理深度解析
  • Android : Camera之CHI API
  • DeFi基石ERC4626标准实现一个金库合约
  • [GHCTF 2025](>﹏<)
  • Manus AI:多语言手写识别的技术革命与未来图景
  • Java 大视界 -- Java 大数据在智能医疗药品研发数据分析与决策支持中的应用(126)
  • linux下的网络抓包(tcpdump)介绍
  • 网络基础概述2
  • 入门到入土,Java学习 day16(算法1)
  • 新华时评:中国维护国际经贸秩序的立场坚定不移
  • 气象干旱黄色预警继续:陕西西南部、河南西南部等地特旱
  • 75岁亚当·费舍尔坐镇,再现80分钟马勒《第九交响曲》
  • 水利部:山西、陕西等地旱情将持续
  • 优化网络营商环境,上海严厉打击涉企网络谣言、黑灰产等违法犯罪
  • 湖北奥莱斯轮胎公司逃避监管排放大气污染物被罚25万元