axios并发请求:
axios.all(
[
this.getAllTask(),// 请求1
this.getAllCity()// 请求2
])
.then(axios.spread(function(allTask, allCity) {
console.log('请求1结果', allTask)
console.log('请求2结果', allCity)
}))
axios相关配置:
axios.create({
baseURL: "",// 请求的域名、基本地址
timeout: 1000,// 请求超时时长,单位ms
url: "",// 请求路径
method: "get、post、put、patch、delete", //请求类型
headers: {},// 请求头
params: {}, //参数,请求参数会拼接在URL上
data: {}, //参数,请求参数放在请求体里
})
配置形式:
1、axios全局配置:配置默认值,一般baseUrl,timeout两个参数
axios.default.baseUrl="";
2、axios实例配置:创建实例后配置参数
let instance = axios.create({})
instance.default.baseUrl="";
3、axios请求配置:发起请求的时候添加配置参数
let instance = axios.create({})
instance.get("", {timeout: 5000})
优先级;axios请求配置 > axios实例配置 > axios全局配置
axios拦截器
let instance = axios.create({
baseURL: 'http://localhost:8080/api',
timeout: 1000
})
const Http = {};// 包裹请求方法的容器
// async作用:编码进入回调地狱
Http[key] = async function(
params,
isFormData=false,// 标识是否是form-data请求
config={} // 配置参数
) {
let url = api.url;
let newParams = {};
// content-type是否是form-data的判断
if(params && isFormData) {
newParams = new FormData();
for(let i in params) {
newParams.append(i, params[i]);
}
} else {
newParams = params;
}
let response = {}; // 请求的返回值
try {
response = await instance[api.method](url, config)
} catch(err) {
response = err;
}
return response;// 返回响应值
}
// 拦截器的添加
instance.interceptors.request.use(config=>{
// 发起请求前做些什么
Toast.loading({
})
return config;
},err => {
// 请求失败
Toast.clear();
Toast("请求失败");
})
// 响应拦截器
nstance.interceptors.response.use(res=>{
Toast.clear();
return res.data;
},err => {
// 响应失败
Toast.clear();
Toast("请求失败");
});
export default Http
getContactList: {
method: 'get',
url: '/contactList'
},
// 新建联系人,form-data形式
newContactForm: {
method: 'post',
url: '/contact/new/form
},
// 新建联系人,application/json形式
newContactJson: {
method: 'post',
url: '/contact/new/json
},
// 编辑联系人
editContact: {
method: 'put',
url: '/contact/edit
},
// 删除联系人
delContact: {
method: 'delete',
url: '/contact/delete
}
}
export default CONTACT_API;
import axios from 'axios'
import service from './contactApi'
// service 循环遍历输出不同的请求方法
let instance = axios.create({
baseURL: 'http://localhost:8080/api',
timeout: 1000
})
const Http = {};// 包裹请求方法的容器
for(let key in service) {
let api = service[key];// url
// async作用:编码进入回调地狱
Http[key] = async function(
params,
isFormData=false,// 标识是否是form-data请求
config={} // 配置参数
) {
// let res = null;
// try {
// res = await axios.get('url');
// catch(err) {
// res = err;//捕捉catch内容
// }
let url = api.url;
let newParams = {};
// content-type是否是form-data的判断
if(params && isFormData) {
newParams = new FormData();
for(let i in params) {
newParams.append(i, params[i]);
}
} else {
newParams = params;
}
// 不同的请求,不同的判断
let response = {}; // 请求的返回值
if(api.method === 'put'
|| api.method === 'post'
|| api.method === 'patch') {
try {
response = await instance[api.method](url, newParams, config)
} catch(err) {
response = err;
}
} else if(api.method === 'get'
|| api.method === 'delete') {
config.params = newParams;
try {
response = await instance[api.method](url, config)
} catch(err) {
response = err;
}
}
return response;// 返回响应值
}
}
// 拦截器的添加
instance.interceptors.request.use(config=>{
// 发起请求前做些什么
Toast.loading({
})
return config;
},err => {
// 请求失败
Toast.clear();
Toast("请求失败");
})
// 响应拦截器
nstance.interceptors.response.use(res=>{
Toast.clear();
return res.data;
},err => {
// 响应失败
Toast.clear();
Toast("请求失败");
});
export default Http