【从零开始搭建uniapp开发框架】(十)—— 异步化封装

框架开源地址:https://gitee.com/yunhaotian/uniapp_mobileFrame

异步的方法,如果不传入 success、fail、complete 等 callback 参数,将以 Promise 返回数据

异步的方法,且有返回对象,如果希望获取返回对象,必须至少传入一项 success、fail、complete 等 callback 参数

 

在common文件夹下新建  sju.async.js 文件

 

 

 

 

 

sju.async.js源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
 * 对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引入封装类代码:

1
2
3
import jsAsync from './common/async.js'
 
Vue.prototype.jsAsync = jsAsync;

 

 

封装方法调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import uniAsync from '@/common/sju.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;
}

 

posted @   编程民工  阅读(438)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示