Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2014, 12:46
Новичок на форуме
Отправить личное сообщение для mbfPavel Посмотреть профиль Найти все сообщения от mbfPavel
 
Регистрация: 19.05.2014
Сообщений: 3

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

столкнулся с интересной проблемой..
имеется код:
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 пустое...
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2014, 12:58
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,510

Ну видать какая-то функция асинхронна и оной нужно callback передавать. Смотрите доки на api.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2014, 13:08
Новичок на форуме
Отправить личное сообщение для mbfPavel Посмотреть профиль Найти все сообщения от mbfPavel
 
Регистрация: 19.05.2014
Сообщений: 3

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

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

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

а при попытке обратиться к ним.. не находит
мне кажется проблема в чём-то другом...
Ответить с цитированием
  #4 (permalink)  
Старый 26.05.2014, 09:32
Новичок на форуме
Отправить личное сообщение для mbfPavel Посмотреть профиль Найти все сообщения от mbfPavel
 
Регистрация: 19.05.2014
Сообщений: 3

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

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

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

всё заработало -)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объекты в массиве. delias Общие вопросы Javascript 2 21.04.2010 22:28