最近在准备整理一个vue项目的架子,想换一种请求方式,以前是用回调写的。这个项目准备用一下 async/await 从新封装一下,网上找了一下,没啥喜欢的,全部准备本身搞一个。vue
本地开发的时候须要使用反向代理,而后我就在这里配置了一下请求的bsaeUrl。ios
const isPro = Object.is(process.env.NODE_ENV, 'production')
let baseUrl = isPro? '' : 'api'
export {
baseUrl
}
复制代码
封装一个函数,返回一个
new Promise
对象。vue-cli
import axios from 'axios'
import { baseUrl } from './api.config'
export default function(url,params,methodType='GET'){
return new Promise((resolve, reject) => {
axios.request({
url:url,
method: methodType,
baseURL:baseUrl,
data:params,
timeout: 1000 * 60,
}).then(res=>{
if(res.data.code === 200){
resolve(res.data)
}
}).catch(err=>{
if(err.message.includes('timeout')){
// 请求超时
}
reject(err)
}).finally(()=>{
// 请求结束
})
})
}
复制代码
我在这里改写了fetch方法,使用的时候极可能会形成困扰,建议仍是修改一下,但我就是不想改啊。(/无奈)axios
请求的url和请求的类型被我写在这个里面,这样在页面上发请求的时候只须要调用暴露出去的方法就能够了,全部这里面全都是请求,建议写好注释。api
import fetch from './fetch'
/** * 测试get接口 * @param {*} id 测试数据得id */
export const test = (params)=> fetch('/base/test',params)
export const testPost = (params)=> fetch('/base/testPost',params,"POST")
复制代码
注释我有好好写哈数组
项目是使用vue-cli3直接建立的,页面还都没写,有个about.vue页面我就直接写在这个里面了,其实我不懒的。async
import { test, testPost } from "../server/api.js";
export default {
name: "about",
data() {
return {};
},
methods: {
async getData() {
try {
let resultP = await testPost({
data:{
id:'2'
}
})
console.log(resultP);
} catch (error) {
console.log(error );
}
}
}
};
复制代码
注意一下async/await
的位置就行了,写法仍是很简单的。函数
import { test, testPost } from "../server/api.js";
export default {
name: "about",
data() {
return {};
},
methods: {
getData() {
Promise.all([
test({
id:'1'
}),testPost({
id:'2'
})]).then(res=>{
console.log(res)
})
}
}
};
复制代码
由于返回的是 new Promise
因此直接适用Prosime.all
就能够了,res是返回的数据组成的数组。测试
页面结构fetch
├── server // 请求相关
│ ├── api.config.js
│ ├── fetch.js
│ ├── api.js
├── views // 页面
│ ├── about.vue // 关于
应该还有没考虑到的地方,欢迎拍砖。