Tôi đã đấu tranh với điều này trong một thời gian. Tôi mới sử dụng Javascript và đã bị ấn tượng rằng mã tôi đang viết đang chạy không đồng bộ. Đây là ví dụ chung:JavaScript dường như không chờ đợi giá trị trả lại
Tôi chạy một số mã trong hàm a. Hàm A sau đó gọi hàm B, người cần trả về một biến cho A để A có thể sử dụng nó trong các hoạt động sau đó của nó. Dường như khi A gọi B, nó vẫn tiếp tục chạy mã riêng của nó, không chờ đợi bị chặn cho giá trị trả về của nó, và B không đủ nhanh để A kết thúc đạt đến điểm cần thiết để sử dụng trả lại giá trị và tôi nhận được lỗi loại biến không xác định. Cách tôi đã làm việc xung quanh điều này là có chức năng Một cuộc gọi Chức năng B mà sau đó gọi một chức năng C mà sẽ làm những gì các hoạt động sau đó A sẽ làm với giá trị trả lại .... Tôi là loại serializing mã của tôi thông qua các cuộc gọi thay vì lợi nhuận ... đó là cồng kềnh dù ...
Dưới đây là một ví dụ khi nó xảy ra trong mã thực tế:
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);
}
Lưu ý: khởi tạo được gọi bởi onload cơ thể = "initialize()" trong html của tôi.
Vì vậy, vấn đề là makeMap yêu cầu giá trị vĩ độ và kinh độ thu được bởi hàm Geocode, nhưng tôi gặp lỗi trong bảng điều khiển cho biết kết quả là không xác định. Chuyện gì vậy? Tôi đến từ Java vì vậy tôi là một chút bối rối về cách lưu lượng dữ liệu đang xảy ra ở đây trong JS! Đây sẽ là những bài học quý giá cho tương lai!
Về một câu hỏi phụ: Tôi nên chia các chức năng của mình ra các tập lệnh ngoài như thế nào? Những gì được coi là thực hành tốt? nên tất cả các chức năng của tôi được nhồi nhét vào một tập tin .js bên ngoài hoặc tôi nên nhóm như các chức năng với nhau?
Được rồi, cảm ơn, tôi mới ở đây! –