首页 / 浏览问题 / 其他 / 问题详情
QueryBySQLService异步同步问题
22EXP 2017年07月24日
//创建查询service,并有事件查询成功和查询失败两个事件
    queryBySQLService = new SuperMap.REST.QueryBySQLService(this.mapUrl,{
            eventListeners:{
                "processCompleted":function(queryMess){jdxzqyswsxh.queryMeasureCompleted(queryMess,jdxzqyParamArr);},
                "procressFailed":function(errormess){jdxzqyswsxh.queryProcressFailed(errormess);}
            }
        });
    
    //执行
    queryBySQLService.processAsync(queryBySQLParams);

QueryBySQLService这个能不能用同步的方式,先执行完之后再执行下面的程序

1个回答

不能。
你可以在执行成功或失败的回调函数里调用需要执行的方法,若需传值,特别是在循环里执行的异步方法,请使用闭包。
比如:http://support.supermap.com.cn/product/search.aspx?querystr=闭包

另外的方法是直接通过iServer REST API不使用iClient for JavaScript,即自己构建HTTP请求,出题请求体和解析结果,不推荐。
 

毛瑞
1
1,780EXP 2017年07月25日
queryBySQLService = new SuperMap.REST.QueryBySQLService(this.mapUrl,{
            eventListeners:{
                "processCompleted":(function(queryMess){return function(queryMess){jdxzqyswsxh.queryMeasureCompleted(queryMess,jdxzqyParamArr);}})(args),
                "procressFailed":function(errormess){jdxzqyswsxh.queryProcressFailed(errormess);}
            }
        });

这里我这么写的"processCompleted":(function(queryMess){return function(queryMess){jdxzqyswsxh.queryMeasureCompleted(queryMess,jdxzqyParamArr);}})(args),  这里这么写之后还是会产生异步的情况
iClient for JavaScript的http请求都是异步处理的,上条回复已经说明不能同步了,使用匿名方法及闭包只是用于给回调函数传值,并不是让方法同步执行。
请在回调方法里调用接下来要执行的方法来实现请求完成再执行下一步操作。
好的谢谢
...