Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объекты выводятся в консоль но недоступны (https://javascript.ru/forum/misc/47326-obekty-vyvodyatsya-v-konsol-no-nedostupny.html)

mbfPavel 19.05.2014 12:46

Объекты выводятся в консоль но недоступны
 
Добрый день.

столкнулся с интересной проблемой..
имеется код:
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 пустое...

Aetae 19.05.2014 12:58

Ну видать какая-то функция асинхронна и оной нужно callback передавать. Смотрите доки на api.

mbfPavel 19.05.2014 13:08

Цитата:

Сообщение от Aetae (Сообщение 312467)
Ну видать какая-то функция асинхронна и оной нужно callback передавать. Смотрите доки на api.


если бы проблема была только в получении данных, вероятно ваш ответ был бы правильным..

но данные ведь приходят
и в консоль возвращается правильный ответ..
то есть объект dataPoint
получает все необходимые значения (выводится в console.log())

а при попытке обратиться к ним.. не находит
мне кажется проблема в чём-то другом...

mbfPavel 26.05.2014 09:32

Цитата:

Сообщение от Aetae (Сообщение 312467)
Ну видать какая-то функция асинхронна и оной нужно callback передавать. Смотрите доки на api.


действительно функция ymaps.geocode асинхронна
и при попытке обращения методами к её данным
данных ещё нет.

решил проблему передачей объекта в функцию

всё заработало -)


Часовой пояс GMT +3, время: 05:58.