//Contents of SmEditor.js
var response = Ext.decode(Prometheus.DeviceRequestHelper.detect(request_id));  //contents of Sm.js
Ext.ns('myApp') 
myApp.DeviceRequestHelper = {  
    detect:function(request_id){  
        var task = function(){  
        Ext.Ajax.request({  
            url: 'device_requests.php',  
            params:{  
                action:'get_device', //in php  
                'request_id':request_id  
                },  
            timeout:30000, //30 seconds  
            success:function(response){//serverside response  
                var result = Ext.decode(response.responseText); //convert to js objects  
                if(result.success == true){//device was detected  
                    cons.log('success,device was detected');  
                    cons.log(result);  
                    Ext.TaskMgr.stop(runTask);  
                    return Ext.encode(result); //javascript strict warning  
                }else{  
                    if(runTask.taskRunCount >= 10){  
                        //retry limit exceeded  
                        Ext.Msg.show({  
                            title:'Server Failure',  
                            msg:"Detection Failed,Unable to detect device",  
                            icon: Ext.MessageBox.ERROR,  
                            buttons: Ext.Msg.OK  
                        });  
                        Ext.MessageBox.getDialog().getEl().setStyle('z-index','80000');  
                        Ext.TaskMgr.stop(runTask);  
                    }  
                }  
            },  
            failure:function(response){  
                Ext.TaskMgr.stop(runTask);  
                Ext.Msg.show({  
                    title:'Server Failure',  
                    msg:"Failed, server communication error",  
                    icon: Ext.MessageBox.ERROR,  
                    buttons: Ext.Msg.OK  
                });  
                Ext.MessageBox.getDialog().getEl().setStyle('z-index','80000');  
            }  
        })  
        }
        var runTask = {  
            run: task,  
            interval:2000,  
            repeat:10  
            };  
        Ext.TaskMgr.start(runTask);  
    }  
}    检测的时候总是出现warning:anonymous function does not always return a value. 这个警告,以至于我不能压缩JS代码?
请问怎么解决这个警告??

解决方案 »

  1.   

    这个是异步的 你在里边return无效 你最好在回调里用函数的方式将你的逻辑封装传入
      

  2.   


    你是这个意思吗?
    function(callback){
     if(success)
       {
         return callback;
       }
    }
      

  3.   

    //Contents of SmEditor.js
    var response = Ext.decode(Prometheus.DeviceRequestHelper.detect(request_id,function(resault){ //这里就可以处理你的ajax函数中的callback参数了 传什么我们可以自己进行控制 也不会因为异步的问题出错
    }));  //contents of Sm.js
    Ext.ns('myApp') 
    myApp.DeviceRequestHelper = {  
        detect:function(request_id,callback){  
            var task = function(){  
            Ext.Ajax.request({  
                url: 'device_requests.php',  
                params:{  
                    action:'get_device', //in php  
                    'request_id':request_id  
                    },  
                timeout:30000, //30 seconds  
                success:function(response){//serverside response  
                    var result = Ext.decode(response.responseText); //convert to js objects  
                    if(result.success == true){//device was detected  
                        cons.log('success,device was detected');  
                        cons.log(result);  
                        Ext.TaskMgr.stop(runTask);  
                        
                    }else{  
                        if(runTask.taskRunCount >= 10){  
                            //retry limit exceeded  
                            Ext.Msg.show({  
                                title:'Server Failure',  
                                msg:"Detection Failed,Unable to detect device",  
                                icon: Ext.MessageBox.ERROR,  
                                buttons: Ext.Msg.OK  
                            });  
                            Ext.MessageBox.getDialog().getEl().setStyle('z-index','80000');  
                            Ext.TaskMgr.stop(runTask);  
                        } 
                    }
                    callback(Ext.encode(result)); //这里增加回调  
                },  
                failure:function(response){  
                    Ext.TaskMgr.stop(runTask);  
                    Ext.Msg.show({  
                        title:'Server Failure',  
                        msg:"Failed, server communication error",  
                        icon: Ext.MessageBox.ERROR,  
                        buttons: Ext.Msg.OK  
                    });  
                    Ext.MessageBox.getDialog().getEl().setStyle('z-index','80000');  
                }  
            })  
            }
            var runTask = {  
                run: task,  
                interval:2000,  
                repeat:10  
                };  
            Ext.TaskMgr.start(runTask);  
        }  
    }    
      

  4.   

    success:function(response){//serverside response    
                    if(result.success == true){//device was detected    
                        return Ext.encode(result); //这里有return
                    }else{  
                        这里没有return
                    }  
                },  在一个函数里(success里), 有的地方有return,有的地方没有return,所以会报那个warning1. 上面的return完全没有任何作用,可以去掉,就不会有warning了
    2. 不知用的什么工具压缩,居然还会检查,那肯定有设置错误等级,设置忽略warning
      

  5.   

    即使有return 由于异步的原因也获取不到你return的变量值 所以最好的解决办法是写一个回调