Дождитесь окончания асинхронной функции Javascript для получения результата (Отложено?)
Хорошо, ребята, я знаю, что эта тема уже обсуждалась несколько раз, но я не могу найти ответ, чтобы решить мою проблему.
Поэтому я пытаюсь сделать простую мысль: я создаю строку, например:distance is : " + CalculateDistance(position);
Требуемый результат что-то вродеdistance is 5kms (8min)
.
CalculateDistance(position)
это функция, вызывающая API карт Google с именем DistanceMatrix для вычисления расстояния между двумя точками. API документированВот, и данный образец отлично работает. Я адаптировал это так:
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()
, значение ОК), а затем объединить значение с «Расстояние is». Если у кого-то есть более разумное решение, оно приветствуется!
Вызов APIасинхронныйи в моем случаеdistanceMatrixResult
всегда пуст в строке результата. Но когда я регистрирую его значение в консоли,distanceMatrixResult
ценность стала хорошейПОСЛЕ Строка была создана.
Все, что я хочу написать, это:
• ВызовCalculateDistance
(который вызывает обратный вызов асинхронно)
• Когдаcallback
заканчивается, объедините строку сdistanceMatrixResult
стоимость.
Я попробовал немногоОтложенный, любить$.done()
а также$.when().then()
но я не могу добиться успеха ...
Кто-нибудь может мне помочь ?
Спасибо !