百度api查询多个地址的经纬度的问题

  在使用百度api查询多个地址的经纬度的时候,由于百度api提供的经纬度查询方法是回调函数,并且后续操作必须等经纬度获取完成才能进行,问题就存在于怎么判断所有地点是否都回调完成了,问了之前的一个前端大佬同事(我是一只前端弱鸡),给我提供的思路,在百度api的回调函数里面再调一次自定义的回调函数,从而在自定义的函数里面进行判断所有地点是否都回调完成了。

  下面是具体代码,  

 1 <script>
 2         //所有待查询经纬度的地点
 3         var allAddress=new Array("北京西站","成都东站","上海南站","西安北站");
 4         //回调前计数用
 5         var callbackBefore = 0;
 6         //回调后计数用
 7         var callbackAfter = 0;
 8         //存放经纬度
 9         var geoCoord={};
10         //循环所有地址
11         for (var i = 0; i < allAddress.length; i++) {
12             //先判断是否已经查询了经纬度(排重)
13             if (!(allAddress[i] in geoCoord)) {
14                 //去调百度api,查经纬度了,先记个数
15                 callbackBefore++;
16                 GetPoint(allAddress[i], function (address, point) {
17                     //回调回来了,经纬度,再记个数
18                     callbackAfter++;
19                     geoCoord[address] = point;
20                     //判断回调之前的数目和回调之后的数目是否一样,一样就表示所有地址都查询完了
21                     if (callbackBefore == callbackAfter) {
22                         //去做你想做的操作了吧
23                         //Travel(geoCoord);
24                         return;
25                     }
26                 });
27             }
28             
29         }
30         //查询经纬度的函数
31         function GetPoint(address, callback) {
32             var local = new BMap.LocalSearch(address,
33             { 
34                 //智能搜索,这本来就是一个回调的方法
35                 "onSearchComplete": function (obj) {
36                     //存放经纬度
37                     var point = [];
38                     if (obj && obj.getPoi(0)) {
39                         var pp = obj.getPoi(0).point;
40                         point.push(pp.lng);
41                         point.push(pp.lat);
42                         //回调方法
43                         callback(address, point);
44                     }
45                 }
46             });
47             local.search(address);
48         }
49 </script>

  我实际情况是那个地址allAddress比较复杂,需要二次循环,不像上面例子这么简单,所以才使用的这种方法。

原文地址:https://www.cnblogs.com/bookobe/p/8512000.html