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 !

questionAnswers(1)

yourAnswerToTheQuestion