【从零开始搭建uniapp开发框架】(十)—— 异步化封装
异步的方法,如果不传入 success、fail、complete 等 callback 参数,将以 Promise 返回数据
异步的方法,且有返回对象,如果希望获取返回对象,必须至少传入一项 success、fail、complete 等 callback 参数
在common文件夹下新建 js-async.js 文件
js-async.js源码:
/**
* 对uni提供的所有api进行代理封装,让方法调用支持Promise
*
* uni.request({url:'url',data:data,success:'',fail:''})
* 引入封装包
* import uniAsync from '@/common/sju.async.js';
* 通过调用方法1:
* uniAsync.request({url:'url',data:data}).then(res=>{成功执行的代码})
* 通过调用方法2:res是成功返回的数据
* function的前边需要添加async关键字
* let res = await uniAsync.request({url:'url',data:data});
*/
// 使用proxy转换为异步化的uni方法
const uniAsync = new Proxy({}, {
// target要代理的目标,name目标的key
get(target, name) {
return (obj) => new Promise((resolve, reject) => {
uni[name]({
...obj,
success: res => {
console.info('-success')
resolve(res)
},
fail: res => {
console.info('-fail')
reject(res)
},
complete:res =>{
console.info('-complete')
}
})
})
}
})
export default uniAsync
main.js引入封装类代码:
封装方法调用:
import uniAsync from '@/common/js-async.js'; //引用异步化封装方法
getInfo: async function(keyword) {
//获取地址位置
var data = {
keyword:keyword
}
//获取地址位置
let res = await uniAsync.request({
url:'https://xxx.com/ws/place/v1/suggestion/?',
dataType:'jsonp',
data:data
});
var data = JSON.parse(res.data);
var result = data;
return result;
}