【Vue】 axios同步执行多个请求
问题
项目中遇到一个需求,在填写商品的时候,选择商品分类后,加载出商品分类的扩展属性。

这个扩展属性有可能是自定义的数据字典里的单选/多远。
要用第一个axios查询扩展属性,第二个axios 从第一个axios中获得的code值去查询 数据字典。
解决思路
我是net后端开发,之前没有接触过Vue,也没用过axios,以前使用ajax是 直接加async:false属性就能同步执行。
在axios中没有这个属性,经过一番查找,发现可以使用ES8新特性 async/await 解决,类似于c#的异步,用法差不多。
具体的用法是 在需要实现同步的方法前面+async 使用方法的时候前面+ await。
然而我发现这样写第一个axios async是失效的,如下图所示,百思不得其解。
询问前端大佬才发现这个函数是一个匿名函数,真正需要等待的是then后面的函数,async需要加在then后面。修改后,问题解决。
示例代码
第一个axios:
// async callApiWithPost('/Owner_Manage/Goods_Extend/GetAllExtendBySortIds', this.groupIds).then((resJson) => {
callApiWithPost('/Owner_Manage/Goods_Extend/GetAllExtendBySortIds', this.groupIds).then(async(resJson) => {
if (resJson.Data !== null && resJson.Data.length > 0) {
for (var index = 0; index < resJson.Data.length; index++) {
let codeList = []
// 如果扩展属性 Type = 4 || 5 ,则执行同步axios方法,查找该扩展属性的字典项,加载到tableData中
if (resJson.Data[index].Type === 4 || resJson.Data[index].Type === 5) {
codeList = await this.$options.methods.getCodeList(resJson.Data[index].Code)
}
this.$refs.tableValue.tableData.push({
ExtendId: resJson.Data[index].Id,
Name: resJson.Data[index].Name,
Type: resJson.Data[index].Type,
codeList: codeList
})
}
}
}).catch((e) => {
console.log('获取分类数据失败')
})
第二个axios:
async getCodeList(code) {
const codeList = []
await callApiWithPost('/BaseInfo_Manage/Base_Code/GetCodeListByType', { id: code.trim() })
.then((resJson) => {
if (!resJson.Data || Object.keys(resJson.Data).length === 0) {
this.$message.error('未查询到数据或数据为空')
} else {
for (var m = 0; m < resJson.Data.length; m++) {
codeList.push({ id: resJson.Data[m].Id, name: resJson.Data[m].Name })
}
}
}).catch((e) => {
console.log('获取字典项数据失败')
})
return codeList
},
【Vue】 axios同步执行多个请求的更多相关文章
- axios 同时执行多个请求
http://chuansong.me/n/394228451820 同时执行多个请求 axios.all([ axios.get('https://api.github.com/xxx/1'), a ...
- vue --- axios拦截器+form格式请求体
在vue2.x中使用CLI生成的模板有很大改变,需要自己手动在main.ts同级目录下新建interceptors.ts interceptors.ts import axios from 'axio ...
- Vue+axios的四种异步请求,参数的携带以及接收
Vue中axios发送GET, POST, DELETE, PUT四种异步请求,参数携带和接收问题 web.xml配置如下 1.GET请求 发送GET请求: <!--params是关键字,说明所 ...
- vue axios 取消上次请求
axios.defaults.timeout = 1000 * 5axios.defaults.baseURL = baseUrlvar CancelToken = axios.CancelToken ...
- vue axios配置 发起请求加载loading请求结束关闭loading
axios带有请求拦截器,避免在每个请求里面加loading重复操作,可以封装进去,在请求开始时加载loading层,请求结束关闭,loading层用vux的loading加载 axios.js im ...
- vue.js学习之 跨域请求代理与axios传参
vue.js学习之 跨域请求代理与axios传参 一:跨域请求代理 1:打开config/index.js module.exports{ dev: { } } 在这里面找到proxyTable{}, ...
- 细说vue axios登录请求拦截器
当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cn ...
- Vue+axios(interceptors) 实现http拦截 + router路由拦截 (双拦截)+ 请求自带loading效果
axios interceptors 拦截器 //interceptors.js // vue axios配置 发起请求加载loading请求结束关闭loading // http request 请 ...
- vue/axios请求拦截
import axios from 'axios';import { Message } from 'element-ui';import Cookies from 'js-cookie';impor ...
随机推荐
- K-近邻算法kNN
K-近邻算法(k-Nearest Neighbor,简称kNN)采用测量不同特征值之间的距离方法进行分类,是一种常用的监督学习方法,其工作机制很简单:给定测试样本,基于某种距离亮度找出训练集中与其靠近 ...
- lseek系统调用
文件的随机读写.目前为止,文件都是顺序访问.读写都是从当前文件的偏移位置开始,然后文件偏移值自动的增加到刚好超出读或者写结束的位置是它为下一次作好准备.在linux中有文件偏移.使得随机访问变得简单, ...
- MySQL时间类型datetime、bigint及timestamp的查询效率
前期数据准备 通过程序往数据库插入 50w 数据 数据表: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_dat ...
- 使用Ganglia监控系统监控集群(debian)
ganglia是一个集群监控软件,底层使用RRDTool获得数据. Ganglia分为ganglia-monitor和gmetad两部分,前者运行在集群每个节点上(被监控机器)收集RRDTool产生的 ...
- nginx 负载均衡设置
upstream lucky5{ server 127.0.0.1:3000 weight=10; server 127.0.0.1:3001 weight=5; } server{ location ...
- 运维自动化之11 - 自动化部署之jenkins及简介
https://www.cnblogs.com/jimmy-xuli/p/9020825.html
- html2image
测试没有,生产有 也就是写死的显示,配置的不显示
- 新鲜出炉!春招-面试-阿里钉钉、头条广告,美团面经分享,看我如何拿下offer!
之前给大家分享了一个朋友在字节面试的面试经历和拿到offer的过程,过程也算是比较精彩了,感兴趣的朋友可以去翻翻之前的那篇文章.话不多说重点来啦,一直有人发私信问我有没有其他大厂的面经分享啊,我也是联 ...
- 面试官:小伙子,你给我说一下你对MySQL索引的理解吧
一.索引是什么? 索引是帮助MySQL高效获取数据的数据结构. 二.索引能干什么? 索引非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引能够轻易将查询性能提高好几个数量级,总 ...
- 为什么Java不允许创建范型数组
问题示例 List<Integer>[] intListArr = new ArrayList<Integer>[8]; // 编译时报错 能看到这么看似没啥问题的一个简单语句 ...