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

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中定义方法时写。
以上步骤是亲自采坑后总结的,希望能帮助到跟我有同样遭遇的序员们@_@


版权声明:本文为HelloMyCode原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。