用vue中的Promise封装axios并实现同步返回值

it2022-05-05  132

Promise封装axios(封装的方法网上很多,不详细写了) 可参考: https://www.kancloud.cn/cooldrw2015/vue_2/1163405 https://www.jianshu.com/p/0229211ea679

/** * post方法,对应post请求 * @param {String} url [请求的url地址] * @param {Object} params [请求时携带的参数] */ export function post(url, params) { return new Promise((resolve, reject) => { axios.post(url, QS.stringify(params)) .then(res => { resolve(res.data); }) .catch(err =>{ reject(err.data) }) }); }

我的实现步骤: 1.创建一个axios.js,以POST为例,在axios.js中统一请求路径:

export const postRequest = (url, params) => { return new Promise((resolve ,reject)=>{ let res= axios({ method: 'post', url: `${base}${url}`, data: JSON.stringify(params), dataType : "json", headers: { 'Content-Type': 'application/json' } }); resolve(res); //返回值 }); };

2.创建api.js存放后台请求路径

// 引入axios.js import { postRequest} from ' axios.js文件路径 '; //后台接口 export const getInfo = (params) => { return postRequest('/test/getInfo ',params) } export const getData = (params) => { return postRequest('/test/getData ',params) }

3.创建test.vue

<style> </style> <template></template> <script> //引入api.js import { //需要调用的方法名称,同api.js中的方法名称 getInfo, getData }from ' api.js的文件路径 '; export default { name:"test", data(){ return { info:"", data:"" } }, methods:{ getInfo:function (params) { return getInfo(params); //定义方法时,直接return getInfo (params) }, getData:function (params) { return getData(params); } }, //begin======【只能在这个区域内同步】================================= async created(){ //一定要用async和await let info=await this.getInfo(123); let data=await this. getData(info); //先执行getInfo方法,返回info的值后,再执行getData方法 }, //end============================================================= 我是别的方法(){ //this.info的值仍然为“” } } </script>

注意:async和await同步的地方依据个人需求而定;也可以在methods中定义方法时写。 以上步骤是亲自采坑后总结的,希望能帮助到跟我有同样遭遇的序员们@_@


最新回复(0)