igorperegudov
@igorperegudov
Frontend-developer

Почему при выводе объекта в консоль, его ключ «postId» видно, но при обращении напрямую — undefined?

console.log(groupWall); выводит в консоль:

groupId: -51016572
postId: Array[50]


но console.log(groupWall[0].postId) - выводит undefined да и вообще console.log(postId in groupWall) выводит false, почему так может быть?

Весь код
var groupsList = [-51016572, -33393308];
var groupWall = {};
var postId = [];
for (var i in groupsList){
    
    var j = 0;
    
    VK.Api.call('wall.get', {owner_id: groupsList[i], count: 50, offset: 0, filter: 'owner'}, function(res) {
        if (res.response){
            postId = [];
            for (var i = 1; i <= 50; i++){
                postId.push(res.response[i].id);
                groupWall[j].postId = postId;
            }
        }
        j = j + 1;
    });
    
    groupWall[i] = {
        groupId: groupsList[i]
    };
    
};

Может как то лучше можно переписать?
  • Вопрос задан
  • 199 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Потому что обращение к VK.api - асинхронная операция, то есть на момент вывода в консоль данных у Вас еще нет
Но так как объекты в js всегда ссылки, консоль пользуется этим и выводит всегда текущее состояние объекта, на момент когда вы разворачиваете дерево объекта в консоли, ответ уже получен и данные в нем есть

UPD:
function VKApiCallAsync(method, params) {
  return new Promise(function(resolve) {
    VK.Api.call(method, params, resolve);
  });
}

var groupsList = [-51016572, -33393308];

Promise.all(groupsList.map(function(id) {
  return VKApiCallAsync('wall.get', {
    owner_id: id,
    count: 50,
    offset: 0,
    filter: 'owner'
  }).then(function(res) {
    return {
      groupId: id,
      postId: res.response.map(function(post) { return post.id; })
    };
  });
})).then(function(groupWall) {
  console.log(groupWall, groupWall[0].postId);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Eugeny1987
Работаю с HostCMS
вроде так нужно
console.log(groupWall.postId[0])
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы