Объекты выводятся в консоль но недоступны
Добрый день.
столкнулся с интересной проблемой.. имеется код: 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, время: 05:58. |