方案1:在.then中执行代码
适用场景:访问接口后,执行的代码固定不变
getList() {
this.$http({
method: "get",
url: "http://127.0.0.1:4523/mock/430173/user/list",
params: params,
}).then((res) => {
this.dataList = res.data.list;
// 执行指定代码
console.log("搜索数据成功!");
});
},
缺点:
- 目标代码嵌套过深
- 访问接口的代码不便于复用
方案2:通过回调函数执行代码
将目标代码作为函数的参数传入
适用场景:访问接口后,不同触发条件需要执行不同的代码
优点:方便接口代码的封装复用
// 初始化
init() {
let initSucInfo = () => {
console.log("初始化数据成功!");
};
this.getList({}, initSucInfo);
},
// 搜索
search() {
let params = {
name: "朝阳",
};
let searchSucInfo = () => {
console.log("搜索数据成功!");
};
this.getList(params, searchSucInfo);
},
// 函数封装——访问接口成功后,执行传入的callBack函数
getList(params = {}, callBack) {
this.$http({
method: "get",
url: "http://127.0.0.1:4523/mock/430173/user/list",
params: params,
}).then((res) => {
this.dataList = res.data.list;
if (callBack) {
// 执行对应的代码
callBack();
}
});
},
方案3:使用async await Promise
优点:代码流程清晰,也方便接口代码的封装复用
要点:
- 使用await 的函数前需加async
- await 后需跟一个 Promise 对象(axios请求就是一个Promise 对象),所以范例代码中getList方法必须 return this.$http
- 若想await 返回接口获取的数据,需在接口的.then中
return Promise.resolve(res);
并定义一个变量,接收await 的返回值
let res = await this.getList(params);
目标代码中不使用接口返回的数据
// 搜索
async search() {
let params = {
name: "朝阳",
};
await this.getList(params);
// 执行目标代码
console.log("搜索数据成功!");
},
getList(params = {}) {
return this.$http({
method: "get",
url: "http://127.0.0.1:4523/mock/430173/user/list",
params: params,
}).then((res) => {
this.dataList = res.data.list;
console.log("访问接口成功!");
});
},
目标代码中使用接口返回的数据
// 搜索
async search() {
let params = {
name: "朝阳",
};
let res = await this.getList(params);
// 执行目标代码
console.log("接口返回的数据为:" + res);
},
getList(params = {}) {
return this.$http({
method: "get",
url: "http://127.0.0.1:4523/mock/430173/user/list",
params: params,
}).then((res) => {
this.dataList = res.data.list;
console.log("访问接口成功!");
return Promise.resolve(res);
});
},