【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 ...
随机推荐
- c++实现扫雷游戏 初学
设计思路 全局变量定义地图和一些判断信息 创建三个地图 分别表示 源地图 显示的效果地图 和一个用来判断点位是否被选中的地图 功能: 玩家输入要翻开的格子的行数和列数.用一个函数来翻开目标格子,如 ...
- 怎样禁止Ceph OSD的自动挂载
前言 本篇来源于群里一个人的问题,有没有办法让ceph的磁盘不自动挂载,一般人的问题都是怎样让ceph能够自动挂载,在centos 7 平台下 ceph jewel版本以后都是有自动挂载的处理的,这个 ...
- symbol lookup error /usr/lib/x86_64-linux-gnu/libstdc++.so.6错误的解决办法
当出现 $ apt-get: symbol lookup error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: undefined symbol: _ZNS ...
- Redis 用的很溜,了解过它用的什么协议吗?
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- linux 用户组操作
1. 添加用户到...目录中useradd -M -s /目录 username 2. 添加用户属于多个组 usermod -G 本组(用户名),组1,组2... 用户名 3. mysql添加禁止登录 ...
- ABBYY FineReader 14新增了什么
FineReader 是一款一体化的 OCR 和PDF编辑转换器,随着版本的更新,功能的增加,FineReader 14的推出继续为用户在处理文档时提高业务生产力,该版本包含若干新特性和功能增强,包括 ...
- Camtasia中对录制视频进行编辑——行为
小视频的逐渐兴起,让我们的生活变得多姿多彩,同时,也造就了一批新媒体的创业者还有越来越多的网红,这不禁使我们也想加入他们的行列.但是问题来了,拍摄视频后最重要的是对视频进行剪辑,没有一款经济适用的软件 ...
- windows安装redis扩展
Thread Safety enabled 打开phpinfo() 看php版本是ts还是nts, 如上是ts版本的,所以需要安装redis的ts版本, redis的扩展下载地址 https://p ...
- python应用(2):写个python程序给自己用
用python写一个程序,然后在命令行上执行,看不到界面(UI),这种程序很常见了,叫命令行程序.然而很多人,特别是不懂程序的人,更需要看到的是一个有界面的,能通过鼠标操作的程序,毕竟已经迈进&quo ...
- G - Pyramid 题解(打表)
题目链接 题目大意 t组数据,给你一个n(n<=1e9)求高度为n的等边三角形,求里面包含了多少个等边三角形 题目思路 打表找规律,然而我一直没找到规律. 看到题解恍然大悟,答案就是C(n+3, ...