Объекты выводятся в консоль но недоступны
Добрый день.
столкнулся с интересной проблемой.. имеется код:
function makeCounter() {
return function f() {
if (!f.currentCount) {
f.currentCount = 0;
}
return ++f.currentCount;
};
}
function dataPoint(addres, name,count) {
this.setCoords2 = function(arr){
this.coords = arr;
}
this.setCoords = function(addres2,obj){
ymaps.geocode(''+addres2+'', {
results: 1
}).then(function (res) {
GeoObject = res.geoObjects.get(0),
coords = GeoObject.geometry.getCoordinates()
/*POINT*/
obj.setCoords2(coords)
dPoint.setPoint(count,addres,name,coords)
})
}
this.setCoords(addres,this)
this.getCoords = function(){
return this.coords
}
}
var mydata ={}
MYcount = makeCounter();
mydata[MYcount()] = new dataPoint('г.Санкт-Петербург, ул.Курчатова, д.10',"point-1",1)
mydata[MYcount()] = new dataPoint('г.Санкт-Петербург, ул.Политехническая, д.6',"point-2",2)
console.log(mydata) // Возвращает хорошо и правильно всю информацию
/**
Object
1: dataPoint
addres: "г.Санкт-Петербург, ул.Курчатова, д.10"
coords: Array[2]
getCoords: function (){
name: "point-1"
setCoords: function (addres2,obj){
setCoords2: function (arr){
__proto__: dataPoint
2: dataPoint
addres: "г.Санкт-Петербург, ул.Политехническая, д.6"
coords: Array[2]
getCoords: function (){
name: "point-2"
setCoords: function (addres2,obj){
setCoords2: function (arr){
__proto__: dataPoint
__proto__: Object
/**/
// здесь начинаются проблемы....
// в частности не видно coords
for(i in mydata) {
console.log(mydata[i])
}
после анализа было выявлено что проблема возникает в момент /*POINT*/ там переменная видится, а если её передавать в глобальную или в объект.. её значение теряется.. или как показалось.. сначала выполняется весь код, возвращается результат а код в POINT выполняется после. тк если изменить метод setCoords и вместо этого метода выполнять
function dataPoint(addres, name,count) {
this.setCoords2 = function(arr){
this.coords = arr;
}
obj = this
ymaps.geocode(''+addres+'', {
results: 1
}).then(function (res) {
GeoObject = res.geoObjects.get(0),
coords = GeoObject.geometry.getCoordinates()
obj.coords = coords
})
this.setCoords(addres,this)
this.getCoords = function(){
return this.coords
}
this.name=name
this.addres = addres
}
проблема остаётся такой же.. подскажите пожалуйста где искать ошибку... ? второй раз уже сталкиваюсь с подобной проблемой.. первый раз та же ситуация была только вместо функции ymaps.geocode была вида
myvar ='';
$.get(url,data,function(result){
//Здесь result видится, а если присвоить
myvar = result
// myvar используется с присвоенным значение
})
// здесь myvar пустое...
|
Ну видать какая-то функция асинхронна и оной нужно callback передавать. Смотрите доки на api.
|
Цитата:
если бы проблема была только в получении данных, вероятно ваш ответ был бы правильным.. но данные ведь приходят и в консоль возвращается правильный ответ.. то есть объект dataPoint получает все необходимые значения (выводится в console.log()) а при попытке обратиться к ним.. не находит мне кажется проблема в чём-то другом... |
Цитата:
действительно функция ymaps.geocode асинхронна и при попытке обращения методами к её данным данных ещё нет. решил проблему передачей объекта в функцию всё заработало -) |
| Часовой пояс GMT +3, время: 15:29. |