Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   Значение свойства-функции объекта (https://javascript.ru/forum/css-html/66363-znachenie-svojjstva-funkcii-obekta.html)

rub1n_83 11.12.2016 14:52

Значение свойства-функции объекта
 
Пишу парсер для 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 это глобальная переменная и изменения в ней должны быть видны одинаково в обоих ф-ях

Rise 11.12.2016 15:06

rub1n_83, а сабж здесь при чем?

rub1n_83 11.12.2016 16:01

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

Rise 11.12.2016 18:03

Цитата:

Сообщение от rub1n_83 (Сообщение 437663)
... Здесь VK.api - это функция-объект, ...

Все функции в js есть объекты по природе итак, здесь api есть свойство-функция (метод) объекта VK
Цитата:

Сообщение от rub1n_83 (Сообщение 437663)
... а в ней анонимная ф-я является свойством этого объекта ...

Анонимная функция есть аргумент (argument3) метода api - VK.api(argument1, argument2, argument3)
Цитата:

Сообщение от rub1n_83 (Сообщение 437663)
... и тоже непростым, а свойством-функцией ...

Аргумент в виде функции есть функция обратного вызова (callback) - VK.api(argument1, argument2, callback)
Цитата:

Сообщение от rub1n_83 (Сообщение 437663)
... получить массив data.response.items за пределами getCityMembers ...

Сразу (синхронно) получить массив за пределами callback не получится так как он выполняется асинхронно.

rub1n_83 11.12.2016 18:23

Как вариант - что посоветуют забелённые js-сединами профессора?????

Rise 11.12.2016 18:34

rub1n_83, там один вариант - работать в пределах callback.

rub1n_83 11.12.2016 18:58

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


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