es8的async await让异步变成了同步的写法,在vue中,可以通过封装axios,使得所有的请求都可以使用同步的写法。
新建一个api.js文件,全局创建api实例
import axios from 'axios'
const qs = require('qs')
const api = {
async get (url, data) {
try {
let res = await axios.get(url, {params: data})
res = res.data
return new Promise((resolve) => {
if (res.code === 0) {
resolve(res)
} else {
resolve(res)
}
})
} catch (err) {
alert('服务器出错')
console.log(err)
}
},
async post (url, data) {
try {
let res = await axios.post(url, qs.stringify(data))
res = res.data
return new Promise((resolve, reject) => {
if (res.code === 0) {
resolve(res)
} else {
reject(res)
}
})
} catch (err) {
// return (e.message)
alert('服务器出错')
console.log(err)
}
},
}
export { api }
使用的时候可以这样使用
import { api } from 'common/js/api'
export default {
data () {
return {
list: [],
}
},
created () {
this.getList()
},
methods: {
async getList () {
let {data} = await api.get('/test/list')
console.log(data)
this.list = data
}
},
}
或者也可以在main.js里全局引入:
main.js
import api from '@/api/api.js'
Vue.prototype.$API = api;
全局使用:
methods: {
async initData() {
let res = await this.$API.get('/json/home.json')
console.log(res)
}
},
created() {
this.initData()
},