Poczekaj na zakończenie asynchronicznej funkcji Javascript, aby uzyskać wynik (odroczony?)
Ok, wiem, że ten temat był już wielokrotnie dyskutowany, ale nie mogę znaleźć odpowiedzi, aby rozwiązać mój problem.
Więc staram się zrobić prostą myśl: tworzę ciąg znaków, taki jak:distance is : " + CalculateDistance(position);
Żądany rezultat to coś w rodzajudistance is 5kms (8min)
.
CalculateDistance(position)
to funkcja wywołująca Google Maps API o nazwie DistanceMatrix w celu obliczenia odległości między dwoma punktami. API jest udokumentowanetutaj, a dana próbka doskonale działa. Dostosowałem to w ten sposób:
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)";
}
A tak przy okazji,distanceMatrixResult
jest zmienną globalną. W rzeczywistości muszę tylko uzyskać treść wyników [0] .distance.text (i kiedy drukuję w konsoli wcallback()
, wartość jest OK), a następnie połącz wartość z „Odległość jest”. Jeśli ktoś ma inteligentniejsze rozwiązanie, jest mile widziane!
Wywołanie API jestasynchronicznyiw moim przypadkudistanceMatrixResult
jest zawsze pusty w ciągu wynikowym. Ale kiedy loguję jego wartość w konsoli,distanceMatrixResult
wartość stała się dobraPO ciąg został utworzony.
Wszystko, co chcę napisać, to:
• PołączenieCalculateDistance
(które wywołują wywołanie zwrotne asynchronicznie)
• Gdycallback
jest zakończone, połącz ciąg zdistanceMatrixResult
wartość.
Próbowałem trochęOdroczony, lubić$.done()
i$.when().then()
ale nie mogę odnieść sukcesu ...
Czy ktoś może mi pomóc?
Dziękuję Ci !