저는 미친 듯이이 주제를 연구 해왔고 매번 같은 결과를 얻었습니다. 이제는 도움이되고있는 답변이 더 이상 없습니다. 콜백 함수의 아이디어는 무엇인지 이해하지만 어쩌면 잘못 구현하는 것일 수도 있습니다. 그래서 여기에 내가 가진 것이있다.콜백 함수에서 결과 가져 오기 및 전역 변수로 설정
나는 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'함수가 비동기 적이라는 것을 알고, 더 이상 반복하지 않아도된다. 저와 관련된 질문에 대한 전체 답변을 읽었습니다. 그리고 다시 새로운 정보를 제공하지 못했습니다. 그래서 내 질문과 나의 좌절감을 요약하면 다음과 같습니다.
- 여기 비동기 및 동기 동작이 진행됩니다.
- 함수를 호출하는 중에 특정 시점에서 타이밍이 누락되었습니다. 정확하게 나타낼 수 없습니다.
- 나는 저에게 연결된 질문에 포함되어있는 것들을 포함하여 여러 가지 다른 예를 찾았습니다. 결과는 실패했습니다.
- 누군가가 오류의 원인, 기능의 타이밍을 놓친 이유 및 그 원인을 식별하고 그 문제에 대한 적절한 해결책을 찾는데 도움을 줄 수 있습니까?
이 기능은 비동기이지만 기능 밖의 결과를 원합니다. 나는 그것을 할 수 있다는 것을 알고 있습니다. 당신이 그것을 표시하기 전에 내가하고 싶은 것을 읽었습니까? –
위의 답변으로 질문에 대한 답변을 찾을 수 있습니까? 함수 밖에서 결과를 얻을 수는 있지만 (시작 변수에서) 비동기 콜백이 반환 될 때까지는 값이 설정되지 않습니다. 코드에서 타이밍 문제 일 수 있습니다 (사용할 수있을 것으로 예상되는 경우). 그 전에). – geocodezip
내가 찾고있는 답변을 제공하지 않습니다. 나는 당신이 제공 한 결과가 발생할 것이라는 것을 이미 알고있다. 문제는 그것이 내가 updateCoords 함수로 작업하도록 만든다는 것이다. 그것은 내가 할 수없는 일입니다. 페이지가로드가 완료되면 콜백 외부에서 전역 액세스에 사용될 수 있도록 시작을 설정하고 싶습니다. –