js的异步代码

js的异步代码

js中的代码都是单线程的。遇到异步的代码,特别注意。因为调用getRoomOption过一次,再执行setRoomOption不会报错,如果没有执行的话,那么option就会出错。

initComponent:function(){//先执行
    var me = this;
    me.applyMeetingOrderMenu();
    me.responseToMessageHub();//所有消息绑定
    me.getRoomOption();//默认已经触发一次。
    me.callParent(); 
},

/***********
 * 2019年1月10日
 * 获取所有的会议室选项
 ***********/
getRoomOption:function(){
    var me=this;
    if(me.roomOption){
        return me.roomOption;
    }
    Ext.Ajax.request({
        url: SHINEVMSHTTP +'/admin/room/list/getroomoption',
        method:"GET",
        success: function(response, opts){
            //解码
            var obj = Ext.decode(response.responseText);
            //整理后的数组
            var ret={};
            Ext.each(obj,function(option){
                var id=option['conferenceroom_id'];
                if(!ret[id]){
                    ret[id]=[];
                }
                ret[id].push(option['option_value']);
            });
            me.roomOption=ret;
            return ret;
        }
    });
},
/***********
 * 2019年1月10日
 * 设置当前已选会议室的电话、视频会议选项
 ***********/
setRoomOption:function(roomId){
    var me=this;
    var option=me.getRoomOption();
    var cur=option[roomId];
    var vm=me.getViewModel();
    var v=vm.getData();
    //先设置全部不可见
    vm.set({
        'option1':true,
        'option2':true,
        'option3':true
    });
    //设置该会议室的可见选项
    Ext.each(cur,function(v){
        var o={};
        o['option'+v]=false;
        vm.set(o);
    });
    //默认选第一个可选项。
    for(var i=1;i<=3;i++){
        if(v['option'+i]===false){
            vm.set({meeting_video:''+i});
            return ;
        }
    }
}