apicloud apicloud

注册
查看: 4144|回复: 5

[APP开发技巧] 关于 模块调用 异步解决方法

主题:
13
帖子:
34
云币:
164

[APP开发技巧] 关于 模块调用 异步解决方法

4144 5 | 发表于 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原生开发中这种方法多见于处理遍历添加事件模型等。。。。
这种方法实用,很巧妙

跟汰渍样,好用不伤手



1

查看全部评分

新手上路

UID:109259

主题:
4
帖子:
109
云币:
330
发表于 2015-7-1 20:05:17 |
谢谢分享。

业余车手

UID:22414

主题:
8
帖子:
815
云币:
12667

版主勋章APICloud粉丝

发表于 2015-7-1 21:38:46 |
感谢分享

主题:
8
帖子:
363
云币:
2726

APICloud粉丝

发表于 2015-7-8 18:53:56 |
谢谢分享!!谢谢分享!!谢谢分享!!谢谢分享!!谢谢分享!!谢谢分享!!

主题:
73
帖子:
4727
云币:
1469

足球狗狗年旺旺旺APICloud粉丝连续签到100天APICloud毕业勋章APICloud骨灰粉模块开发者签到党土豪志愿者一周年中秋节社会摇圣诞节老司机你吃屎!首长好!我还是个孩子!托马斯全旋女朋友不想上班!装逼侠单身狗超人SB侠

发表于 2015-7-29 13:55:08 |

新手上路

UID:601490

主题:
35
帖子:
107
云币:
130
发表于 2018-4-22 11:09:16 |
请问怎么向模块里传参数
您需要登录后才可以回帖 登录 | 立即注册

快速回复 返回顶部 返回列表