好球員,我知道這個話題已經討論過多次,但我無法找到答案,解決我的問題。
所以我試圖做一個簡單的想: 我創建一個字符串,如:distance is : " + CalculateDistance(position);
的通緝的結果是一樣的東西distance is 5kms (8min)
。等待異步JavaScript函數來檢索結果的末尾(遞延?)
CalculateDistance(position)
是調用谷歌地圖API稱爲DistanceMatrix兩點之間計算距離的函數。 API記錄爲here,並且給出的示例完美地起作用。我適應這樣的:
function CalculateDistance(position)
{
var service = new google.maps.DistanceMatrixService();
var destination = new google.maps.LatLng(/* some lat/lng */);
service.getDistanceMatrix(
{
origins: [position],
destinations: [destination],
travelMode: google.maps.TravelMode.DRIVING,
unitSystem: google.maps.UnitSystem.METRIC,
avoidHighways: false,
avoidTolls: false
}, callback);
}
function callback(response, status) {
if (status == google.maps.DistanceMatrixStatus.OK)
{
var origins = response.originAddresses;
var destinations = response.destinationAddresses;
var results = response.rows[0].elements;
distanceMatrixResult = results[0].distance.text + " (" + results[0].duration.text + " min)";
}
哦,順便說一句,distanceMatrixResult
是一個全局變量。實際上,我只需要獲取結果[0] .distance.text的內容(並且當我在控制檯中打印callback()
時,該值爲OK),然後將該值與「Distance is」連接起來。如果有人有更聰明的解決方案,歡迎!
API調用是異步,在我的情況下,distanceMatrixResult
總是在結果字符串中爲空。但是當我在控制檯中記錄它的值時,distanceMatrixResult
值成爲好的那個AFTER字符串被創建。
所有我想要寫的是:
•呼叫CalculateDistance
(其中調用回調異步)
•當callback
結束時,連接具有distanceMatrixResult
值的字符串。
我嘗試了一些Deferred,像$.done()
和$.when().then()
,但我不能成功...
有人能幫助我嗎?
謝謝!
我喜歡會說一個巨大的謝謝@Bergi,MyString中的值是好的,非常感謝你太多了!仍然有一些事情要做,以便一切正常,但你的答案會讓我進步和更好地理解延遲。 – AlexB
對不起,直接問你另一個問題,我想調用'calculateDistance()'三次,並連接'myString'中的DistanceMatrix API的結果。我嘗試了som for for循環,但我總是在myString中獲得第一個結果...你知道如何實現這個@Bergi嗎? – AlexB
我不知道你究竟做了什麼,但你可能需要[考慮關閉對於在循環之後調用(異步)回調(http://stackoverflow.com/questions/750486/javascript-closure- inside-loops-simple-practical-example)以及['$ .when'](http://api.jquery.com/jQuery.when/)等待解決多重承諾。如果這些鏈接沒有幫助,請使用您的代碼發佈另一個問題。 – Bergi