Leandro, похоже, вам, возможно, потребуется определить, какие области вашего кода вы можете использовать в отдельных функциях. Это упростит достижение того, что вы хотите сделать.
Во-первых, однако, обратные вызовы. Вы знаете, что вы можете передавать функции как параметры в другие функции? Это чрезвычайно полезная функция, особенно когда вы имеете дело с асинхронными вызовами API. Что-то вроде этого примера - мы вызываем doThis
, но передаем функцию для вызова, как только мы выполнили все остальные вещи в doThis
, что нам нужно. Консоль покажет журналы в порядке.
// `doThis` receives a function as a callback and executes it after doing stuff.
function doThis(callback) {
console.log('logged first');
callback();
}
// pass in a function as a parameter to `doThis` when we call it
doThis(function() {
console.log('logged second');
});
Ну, мы можем это сделать и с вашим кодом. (Я сократил часть вашего кода для краткости)
Вставьте код геокода в его собственную функцию. Здесь я толкая результаты Геокодировать в функции обратного вызова:
function getGeocode(callback) {
geocoder.geocode({'address': address}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
callback(results);
}
});
}
Затем вызовите эту функцию из где-то в вашем коде, используя функцию обратного вызова. Здесь обратный вызов получает данные результатов из функции геокодирования.
getGeocode(function (results) {
var g_lat = results[0].geometry.location.lat();
var g_long = results[0].geometry.location.lng();
console.log(g_lat, g_long);
});
Вы даже можете обернуть это в своей собственной функции, так что в любое время вы хотите, чтобы захватить некоторые данные геокодировать и зарегистрировать ее (к примеру), вам просто нужно, чтобы выполнить его, возможно, передавая адрес, который вы хотите:
function getGeocode(address, callback) {
geocoder.geocode({'address': address}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
callback(results);
}
});
}
function getGeocodeAndProcess(address) {
getGeocode(address, function (results) {
var g_lat = results[0].geometry.location.lat();
var g_long = results[0].geometry.location.lng();
console.log(g_lat, g_long);
});
}
getGeocodeAndProcess('chicago');
Надеюсь, это было полезно для вас.
потому что функция геокодирования асинхронна .... –
спасибо Аруну, однако я очень наивна в JS, что это значит? –
Ответ в дубликате не совсем понятен. -_- –