Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.12.2016, 14:52
Интересующийся
Отправить личное сообщение для rub1n_83 Посмотреть профиль Найти все сообщения от rub1n_83
 
Регистрация: 21.11.2016
Сообщений: 11

Значение свойства-функции объекта
Пишу парсер для VK. Запнулся на следующем:
var resp[];
function getCityMembers(city, agefrom, ...){
  VK.api('users.search', {...some params}, function (data){
    resp = data.response.items.concat();
    console.info(resp);
    return resp;
});
function getData(){
  getCityMembers(city, agefrom, ...);
  console.info(resp);
}


В функции getCityMembers команда console.info выводит полученный массив с данными, а в ф-и getData массив resp пустой. Не могу понять почему - ведь resp это глобальная переменная и изменения в ней должны быть видны одинаково в обоих ф-ях

Последний раз редактировалось rub1n_83, 11.12.2016 в 14:54.
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2016, 15:06
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

rub1n_83, а сабж здесь при чем?
Ответить с цитированием
  #3 (permalink)  
Старый 11.12.2016, 16:01
Интересующийся
Отправить личное сообщение для rub1n_83 Посмотреть профиль Найти все сообщения от rub1n_83
 
Регистрация: 21.11.2016
Сообщений: 11

Сабж - в смысле заголовок темы? Здесь VK.api - это функция-объект, а в ней анонимная ф-я является свойством этого объекта и тоже непростым, а свойством-функцией. Мне нужно каким-то образом получить в функции getData значение этого свойства(в данном случае массив). Лучшее, что пришло в голову - объявить глобальную переменную resp[] и скопировать в неё получаемый массив. Однако в ф-и getData() этот массив пуст. Не могу понять почему. Если есть другие варианты, как я могу получить массив data.response.items за пределами getCityMembers - пишите, не стесняйтесь.
Ответить с цитированием
  #4 (permalink)  
Старый 11.12.2016, 18:03
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Сообщение от rub1n_83 Посмотреть сообщение
... Здесь VK.api - это функция-объект, ...
Все функции в js есть объекты по природе итак, здесь api есть свойство-функция (метод) объекта VK
Сообщение от rub1n_83 Посмотреть сообщение
... а в ней анонимная ф-я является свойством этого объекта ...
Анонимная функция есть аргумент (argument3) метода api - VK.api(argument1, argument2, argument3)
Сообщение от rub1n_83 Посмотреть сообщение
... и тоже непростым, а свойством-функцией ...
Аргумент в виде функции есть функция обратного вызова (callback) - VK.api(argument1, argument2, callback)
Сообщение от rub1n_83 Посмотреть сообщение
... получить массив data.response.items за пределами getCityMembers ...
Сразу (синхронно) получить массив за пределами callback не получится так как он выполняется асинхронно.
Ответить с цитированием
  #5 (permalink)  
Старый 11.12.2016, 18:23
Интересующийся
Отправить личное сообщение для rub1n_83 Посмотреть профиль Найти все сообщения от rub1n_83
 
Регистрация: 21.11.2016
Сообщений: 11

Как вариант - что посоветуют забелённые js-сединами профессора?????
Ответить с цитированием
  #6 (permalink)  
Старый 11.12.2016, 18:34
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

rub1n_83, там один вариант - работать в пределах callback.
Ответить с цитированием
  #7 (permalink)  
Старый 11.12.2016, 18:58
Интересующийся
Отправить личное сообщение для rub1n_83 Посмотреть профиль Найти все сообщения от rub1n_83
 
Регистрация: 21.11.2016
Сообщений: 11

никак в толк не могу взять почему изменения в глобальной переменной resp, сделанные в callback, не видны за пределами этой callback функции.
resp = data.response.items.concat();

Последний раз редактировалось rub1n_83, 11.12.2016 в 19:00.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42
Создание примитива с таким же именем как у уже существующего свойства функции lancer Общие вопросы Javascript 7 29.07.2013 20:23
В ie не удалось получить значение свойства "keyCode" solomon2 Events/DOM/Window 3 10.03.2012 14:17
Свойства функции FINoM Общие вопросы Javascript 8 22.12.2011 18:27
Как вывести на экран значение функции SELECT MAX(id) Владдд Серверные языки и технологии 3 25.01.2009 16:07