Как я возвращаю переменную из Google Maps обратный вызов геокодера JavaScript?

РЕДАКТИРОВАТЬ: Используйте and_ из sqlalchemy, чтобы объединить join условия

from sqlalchemy import and_

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, and_(User_Skill.skill_id==Skill.id, 
                                       User_Skill.user_id==4)).\
            order_by(Skill.name).all()
<час>

Старый, неправильный ответ (разные результаты):

[ 118] Используйте .filter, чтобы ограничить ваши результаты. Измените ваш запрос на:

skills = db.session.query(Skill, User_Skill.skill_id).\
            outerjoin(User_Skill, User_Skill.skill_id==Skill.id).\
            filter(User_Skill.user_id==4).\
            order_by(Skill.name).all()
28
задан Matthew Flaschen 20 September 2010 в 22:38
поделиться

5 ответов

Вы не можете вернуть значение из функции, значение еще не существует, когда функция возвращается.

Метод geocode выполняет асинхронный вызов и использует обратный вызов для обработки результата, поэтому вы должны сделать то же самое в функции codeLatLng:

var geocoder;
function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(40.730885,-73.997383);
  codeLatLng(function(addr){
    alert(addr);
  });
}

function codeLatLng(callback) {
  var latlng = new google.maps.LatLng(40.730885,-73.997383);
  if (geocoder) {
    geocoder.geocode({'latLng': latlng}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        if (results[1]) {
          callback(results[1].formatted_address);
        } else {
          alert("No results found");
        }
      } else {
        alert("Geocoder failed due to: " + status);
      }
    });
  }
}
47
ответ дан Guffa 28 November 2019 в 03:03
поделиться

Вы можете получить ценность, используя localalstorage.

 geocoder.geocode({
            'address': address,             
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var latitude = results[0].geometry.location.lat();
                var longitude = results[0].geometry.location.lng();
            }                             
           localStorage.setItem("endlat", latitude);
           localStorage.setItem("endlng", longitude);
            });
var end_lat = localStorage.getItem("endlat");
var end_lng = localStorage.getItem("endlng");

Но он возвращает предыдущее значение. Возвращает текущее значение, когда мы щелкаем дважды ...

2
ответ дан vino 28 November 2019 в 03:03
поделиться

Это возвращение не возвращается из codeLatLng; он возвращается из анонимной функции, передаваемой в geocoder.geocode.

Я думаю, вам нужно будет передать данные, используя другой механизм, например, глобальная переменная

-2
ответ дан Bobby Jack 28 November 2019 в 03:03
поделиться

Вы делаете асинхронный запрос, ваша функция codeLatLng() завершила работу и вернулась задолго до того, как геокодер закончил работу.

Если вам нужно, чтобы данные геокодера продолжали поступать, вам придется соединить ваши функции в цепочку:

function initialize() {
    geocoder = new google.maps.Geocoder();
    codeLatLng();
}
function codeLatLng() {
    var latlng = new google.maps.LatLng(40.730885,-73.997383);
    if (geocoder) {
        geocoder.geocode({'latLng': latlng}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                    if (results[1]) {
                        initContinued(results[1].formatted_address);
                    } else {
                        alert("No results found");
                    }
                } else {
                    alert("Geocoder failed due to: " + status);
                }
        });
      }

}
function initContinued(addr) {
    alert(addr);
}
11
ответ дан 28 November 2019 в 03:03
поделиться

передать геокодер в качестве параметра в функцию codeLatLng ().

function codeLatLng(geocoder) {

назовите это так в своей функции инициализации:

var addr = codeLatLng(geocoder);
-1
ответ дан 28 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: