2014-09-22 3 views
-1

Итак, я изучаю эту тему как сумасшедшую, и каждый раз получаю одинаковые результаты, и я не получаю больше ответов, которые становятся полезными. Я понимаю, какова идея функции обратного вызова, но, возможно, я неправильно ее реализую. Итак, вот что у меня есть.Получить результат от функции обратного вызова и установить глобальную переменную

Я работаю над заданием Google Maps, у меня все работает нормально, просто когда они приходят на страницу, я бы хотел, чтобы их текущее местоположение хранилось в переменной «start» вверху. Он может быть сохранен как объект или массив, который не имеет значения. Я использовал поле оповещения для проверки моего вывода, но я никуда не бываю. Я напишу свой код ниже.

//set global variables that will be used for the maps later on in the script 
var pj; 
var tifton; 
var nlv; 
var direction; 
var start ='default'; 

function initialize(){  
    pj = new google.maps.LatLng(41.048899, -95.822685); //map for pacific junction 
    tifton = new google.maps.LatLng(31.417032, -83.498785); //map for tifton 
    nlv = new google.maps.LatLng(36.228928, -115.112426); //map for north las vegas 
    //set the directions for the user 

    updateCoords(function(point){ 
     if(point){ 
      start = point.latitude; 
     } 
    }); 

    alert(start); //it will not stop showing default as the result 

    drawMap(pj,"pj-map", "Pacific Junction, IA"); 
    drawMap(tifton, "tifton-map", "Tifton, GA"); 
    drawMap(nlv, "nlv-map", "North Las Vegas, NV") 
} 

function drawMap(coords, div, title){ 
    var opts = { 
     zoom: 8, 
     center: coords, 
     panControl: false, 
     zoomControl: false, 
     scaleControl: false, 
     scrollwheel: false, 
     draggable: false, 
     disableDoubleClickZoom: true 
    }; //generate map options for each individual map 

    var map = new google.maps.Map(document.getElementById(div), opts); //set the canvas that the map will be drawn to 
    var marker = new google.maps.Marker({ 
     position: coords, 
     title: title 
    }); 
    marker.setMap(map); 
} 
function updateCoords(callback){ 
    navigator.geolocation.getCurrentPosition(function(position){ 
     var pos = { 
      latitude: position.coords.latitude, 
      longitude: position.coords.longitude 
     }; 

     callback(pos); 
    }); 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

EDIT: В ответ на вопрос, отмеченный как дублирование, я добавлю еще несколько деталей. Ссылка на вопрос, который мне был предоставлен, не помогла мне дальше, чем я уже был. Все, что было сделано, это повторить асинхронные и синхронные функции и процессы для меня. Мне больше не нужно этого.

Что я ищу это ответ, который может мне помочь сломать интерьер этого

function updateCoords(callback){ 
    navigator.geolocation.getCurrentPosition(function(position){ 
     var pos = { 
      latitude: position.coords.latitude, 
      longitude: position.coords.longitude 
     }; 
     if() 
     callback(pos); 
    }); 
} 

и почему это

updateCoords(function(point){ 
    if(point){ 
     start = [ point.latitude, point.longitude]; 
    } 
}); 

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

  1. У меня асинхронное и синхронное поведение происходит здесь.
  2. Мне не хватает времени в определенной точке во время вызова функции, я не могу ее точно определить.
  3. Я пробовал несколько различных примеров, которые я нашел, включая те, которые были в вопросе, связанном со мной, результаты не удались.
  4. Может ли кто-нибудь помочь мне определить, что такое ошибки, когда время выполнения функций упускается, и почему это происходит, а затем помочь мне в определении правильного решения этой проблемы.

ответ

0

Функция геолокации является асинхронной. Вы должны использовать результат в функции обратного вызова.

function initialize(){  
    pj = new google.maps.LatLng(41.048899, -95.822685); //map for pacific junction 
    tifton = new google.maps.LatLng(31.417032, -83.498785); //map for tifton 
    nlv = new google.maps.LatLng(36.228928, -115.112426); //map for north las vegas 
    //set the directions for the user 

    updateCoords(function(point){ 
     if(point){ 
      start = point.latitude; 
      alert(start); //it will not stop showing default as the result 

     } 
    }); 
+0

Я знаю, что функция асинхронна, но я хочу получить результат вне функции. Я знаю, что это возможно, вы даже прочитали то, что я хотел сделать, прежде чем вы отметили его? –

+0

Не отвечает ли ответ на ваш вопрос? Вы можете получить результат вне функции (в стартовой переменной), но, очевидно, значение не будет установлено до тех пор, пока не вернется асинхронный обратный вызов, что будет проблемой синхронизации с вашим кодом (если вы ожидаете, что он будет доступен до этого). – geocodezip

+0

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