2014-09-22 2 views
-1

저는 미친 듯이이 주제를 연구 해왔고 매번 같은 결과를 얻었습니다. 이제는 도움이되고있는 답변이 더 이상 없습니다. 콜백 함수의 아이디어는 무엇인지 이해하지만 어쩌면 잘못 구현하는 것일 수도 있습니다. 그래서 여기에 내가 가진 것이있다.콜백 함수에서 결과 가져 오기 및 전역 변수로 설정

나는 Google지도 작업을하고 있는데, 그 밖의 모든 것이 올바르게 작동하고 있습니다. 페이지 상단에있는 '시작'변수에 현재 위치가 저장되기를 원합니다. 그것은 Object 또는 배열로 저장할 수 있습니다. 차이는 없습니다. 경고 상자를 사용하여 출력을 테스트했지만 아무데도 빨리 갈 수 없습니다. 나는 아래에 나의 코드를 게시 할 것이다.

//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); 

편집 :이 질문을 중복으로 표시 한 것에 대한 응답으로, 좀 더 자세히 설명하겠습니다. 나에게 제공된 질문에 대한 링크는 이미 도움이되지 않았다. 그것이 반복 한 것은 비동기식이고 동기식 함수와 프로세스였습니다. 나는 그 이상을 필요로하지 않는다.

은 내가 찾고 날이

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

geolocation 함수는 비동기입니다. 콜백 함수에서 결과를 사용해야합니다.

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 함수로 작업하도록 만든다는 것이다. 그것은 내가 할 수없는 일입니다. 페이지가로드가 완료되면 콜백 외부에서 전역 액세스에 사용될 수 있도록 시작을 설정하고 싶습니다. –

관련 문제