Кажется, JavaScript не ждет возвращаемых значений

Я боролся с этим некоторое время сейчас. Я новичок в Javascript, и у меня сложилось впечатление, что код, который я пишу, работает асинхронно. Вот общий пример:

Я запускаю некоторый код в функции а. Затем функция A вызывает функцию B, которой необходимо вернуть переменную в A, чтобы A могла использовать ее в своих последующих операциях. Кажется, однако, что, когда A вызывает B, он все еще продолжает запускать свой собственный код, не ожидая заблокированного возвращаемого значения, и B недостаточно быстр, чтобы A в конечном итоге достигло точки, в которой он должен был бы использовать возврат значение и я получаюнеопределенная ошибка типа переменной.

Чтобы обойти это, я должен вызвать функцию A, вызывая функцию B, которая затем вызывает функцию C, которая будет делать то же, что и более поздние операции, которые A будет выполнять с возвращаемым значением ... вместо возврата ... это громоздко, хотя ...

Вот пример того, когда это происходит в реальном коде:

function initialize() {
    //Geocode Address to obtin Lat and Long coordinates for the starting point of our map
    geocoder = new google.maps.Geocoder();
    var results = geocode(geocoder);
    makeMap(results[0].geometry.location.lat(), results[0].geometry.location.lng());

}

function geocode(geocoder) {
    //do geocoding here...

    var address = "3630 University Street, Montreal, QC, Canada";
    geocoder.geocode({ 'address': address }, function (results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
           return results;
            }
         else {
            alert("Geocode was not successful for the following reason: " + status);
        }
   });

}

function makeMap(lat, long) {
  //  alert(lat); for debuging
    var mapOptions = {
        center: new google.maps.LatLng(lat, long),
        zoom: 17,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
     map = new google.maps.Map(document.getElementById("map_canvas"),
        mapOptions);
}

Примечание: initialize вызывается телом onload = "initialize ()" в моем html.

Итак, проблема в том, что makeMap требует значения широты и долготы, полученные функцией Geocode, но я получаю сообщение об ошибке в консоли, в котором говорится, что результаты не определены. Что происходит? Я пришел с Java, так что я немного озадачен тем, как происходит поток данных здесь, в JS! Это будут ценные уроки на будущее!

По боковому вопросу: Как мне разделить мои функции по внешним скриптам? Что считается хорошей практикой? Должны ли все мои функции быть объединены в один внешний файл .js или я должен сгруппировать подобные функции вместе?

Ответы на вопрос(4)

Ваш ответ на вопрос