在使用百度api查詢多個地址的經緯度的時候,由於百度api提供的經緯度查詢方法是回調函數,並且後續操作必須等經緯度獲取完成才能進行,問題就存在於怎麼判斷所有地點是否都回調完成了,問了之前的一個前端大佬同事(我是一隻前端弱雞),給我提供的思路,在百度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比較複雜,需要二次迴圈,不像上面例子這麼簡單,所以才使用的這種方法。