저는 지금 당분간이 문제에 시달렸습니다. 저는 Javascript를 처음 사용하고 있으며 작성한 코드가 비동기 적으로 실행되고 있다는 인상하에있었습니다. 다음은 일반적인 예입니다.JavaScript가 반환 값을 기다리는 것 같지 않습니다.
함수에서 일부 코드를 실행합니다. 함수 A는 함수 B를 호출합니다. 함수 B는 변수를 A로 반환해야하므로 A는 이후 작업에서이 변수를 사용할 수 있습니다. A가 B를 호출 할 때, A는 리턴 값을 기다리지 않고 자신의 코드를 계속 실행하고 B는 반환을 사용하는 데 필요한 지점에 도달하도록 B가 충분히 빠르지는 않습니다. 값이 이고 정의되지 않은 변수 유형 오류이 표시됩니다.
나는이 문제를 해결하기 위해 함수 A 호출 함수 B를 호출하고 반환 함수로 A가 수행 할 함수 C를 호출한다. 나는 일종의 직렬화 대신 반환의 호출을 통해 내 코드는 ... 그 다음은
그것이 실제 코드에서 발생하는 경우의 예입니다 ...하지만 복잡 :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()"내 HTML에.
그래서 문제는 makeMap에 Geocode 함수에서 얻은 위도와 경도 값이 필요하지만 결과가 정의되지 않는다는 오류가 콘솔에 표시된다는 것입니다. 무슨 일 이니? Java에서 왔기 때문에 JS에서 데이터 흐름이 어떻게 발생하는지 조금 혼란스러워합니다! 이것은 미래를위한 귀중한 교훈이 될 것입니다!
측면 질문 : 외부 스크립트에서 내 기능을 어떻게 분할해야합니까? 좋은 연습으로 간주되는 것은 무엇입니까? 모든 기능을 하나의 외부 .js 파일로 묶어 두거나 기능을 함께 그룹화해야합니까?
좋아, 고마워, 전 여기! –