请选择 进入手机版 | 继续访问电脑版
帖子
帖子
用户
博客
课程
显示全部楼层
13
帖子
0
勋章
164
Y币

关于 模块调用 异步解决方法

[复制链接]
发表于 2015-6-19 16:54:40



AC的功能都是通过封装模块实现的,这也决定了其模块数据与html页面执行并不是出于“同一层”,也是广义上的异步模式

但是有时候又必须要同步的调取模块的返回数据,解决的方法就是js的通用做法,通过callback 回调解决

场景:想做个文件上传,用了文件上传模块,但是在上传后要拿到上传的状态等 “内部”参数,而又不能在文件上传模块的内部函数去做下一步处理,原因很多,比如这个文件上传被我们打包成了工具类。。。解决方法就是将文件上传模块打包为一个工具函数,并给回调函数

这个说很难说清楚,即使你去百度异步回调的原理很多大神说了一堆也很难说清楚,而很多大神异步回调用得很熟,但是不一定清楚其原型原理,不管,上代码

function upload(callback){
var model = api.require('model');
                        model.uploadFile({
                            report:true,
                            data:{
                                file:{
                                    name:file,
                                    url:fileurl
                                }
                            }
                        },function(ret, err) {
                            if (ret) {
                                var state = ret.state;
                                if (state == 0) {//正在传输
                                        if(ret.progress){

                                            }
                                } else {//传输完成   得到该文件对象  id name size type 等数据库中字段
                                                console.log(ret.id);
                                                callback(ret);   //关键点     
                                                //arcProgress.close();
                                }
                            } else {
                                        api.toast({msg:'上传文件失败'+err,duration:3000,location: 'bottom'});
                            }
                        });


}



然后在调用 该方法

//前置代码
....

var data;
upload(function(res){

    //res   就是 模块返回的参数数据
    //直接可以使用
   data=res;
})

alert(data)




完成
在js原生开发中这种方法多见于处理遍历添加事件模型等。。。。
这种方法实用,很巧妙

跟汰渍样,好用不伤手



4
帖子
0
勋章
332
Y币
谢谢分享。
8
帖子
0
勋章
1万+
Y币
感谢分享
8
帖子
0
勋章
2726
Y币
谢谢分享!!谢谢分享!!谢谢分享!!谢谢分享!!谢谢分享!!谢谢分享!!
43
帖子
2
勋章
103
Y币
请问怎么向模块里传参数
您需要登录后才可以回帖 登录

本版积分规则