js调用百度mapAPI,由于异步执行导致结果顺序不对以及数据丢失

js调用百度地图API,由于异步执行导致结果顺序不对以及数据丢失
本帖最后由 download0322 于 2014-07-09 20:31:51 编辑
利用百度地图API(geocoder里的getlocation函数)对一个文件里面约2W个坐标点进行解析,并将解析的结果输出到另一个文件。
现在有两个问题
第一,百度地图的这个API好像是异步执行的?导致我输出的坐标顺序和输入的顺序不一样了。。。
第二,我输入了2W个点,输出却只有大约8000个点,怎么会呢?
我现在想等getlocation这个函数在服务器解析成功了之后再继续往下执行,也就是把异步改成同步,可不可以实现呢?
求大神指导啊~
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>所有POI的查询-地址解析</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.4"></script>
</head>
</html>
<script type="text/javascript">
var mOption = {
    poiRadius : 500,
    numPois : 12
}
var oFso1,input,input2;
oFso1 = new ActiveXObject("Scripting.FileSystemObject");
input = oFso1.OpenTextFile("c:\\test2.txt",1);  //数据来源

while (!input.AtEndOfStream)
{
var sContent = input.ReadLine();
var text=sContent.split(" ");

var mPoint = new BMap.Point(parseFloat(text[2]), parseFloat(text[1]));
var myGeo = new BMap.Geocoder();        //创建地址解析实例

(function(geo,point,option,s){
geo.getLocation
(
point,
function mCallback(rs)
{
var oFso,output;
oFso = new ActiveXObject("Scripting.FileSystemObject");  
output = oFso.OpenTextFile("c:\\out.txt",8,true); //写方式打开  
var allPois = rs.surroundingPois;       //获取全部POI(该点半径为100米内有6个POI点)
var str="";
for(i=0;i<allPois.length;++i){
str += " " + allPois[i].tags;       
}
output.Writeline(s + str);
output.Writeline(s);
output.Close(); 
},
option
);
})(myGeo,mPoint,mOption,sContent);
}
input.Close(); 

alert("done"); 
</script>

------解决方案--------------------
解析都是异步的,无法同步

可以一个点一个点进行提交,一个点获取完后再发送下一个点进行解析

一次性发送2w个点都是异步请求无法控制哪个先返回

先读到数组中,在发送

   var mOption = {
        poiRadius: 500,
        numPois: 12
    }
    var oFso1, input, input2;
    oFso1 = new ActiveXObject("Scripting.FileSystemObject");
    input = oFso1.OpenTextFile("c:\\test2.txt", 1);  //数据来源
    var arr = [];
    while (!input.AtEndOfStream) {
        var sContent = input.ReadLine();
        arr[arr.length] = sContent;////////存数组中
       
    }
    input.Close();


    var l = arr.length, now = 0;
    function ParseAddr() {
        var text = arr[now].split(" ");
        var mPoint = new BMap.Point(parseFloat(text[2]), parseFloat(text[1]));
        var myGeo = new BMap.Geocoder();        //创建地址解析实例

        (function (geo, point, option, s) {
            geo.getLocation
        (
            point,
            function mCallback(rs) {
                var oFso, output;
                oFso = new ActiveXObject("Scripting.FileSystemObject");
                output = oFso.OpenTextFile("c:\\out.txt", 8, true); //写方式打开         
                var allPois = rs.surroundingPois;       //获取全部POI(该点半径为100米内有6个POI点)
                var str = "";
                for (i = 0; i < allPois.length; ++i) {
                    str += " " + allPois[i].tags;
                }