Не удается получить доступ к объектам в массиве - Javascript - PullRequest
0 голосов
/ 30 апреля 2020

Итак, я выполняю несколько запросов $ http.get в forl oop и сохраняю результаты в массиве. Когда я запускаю: console.log(episodesObj[0]), возвращается undefined. Однако, когда я запускаю console.log(episodesObj), он возвращает весь массив:

enter image description here

Ниже приведен код, который я запускаю

    var episodesObj = [];
    for(i=1;i<=num_seasons;i++) {
      $http.get('/api/show/<%=show.id%>/season/'+i)
      .then(response => {
        episodesObj.push(response.data)
      });
    }
    console.log(episodesObj); ```

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Вы не отправляете ответ на ваш массив до тех пор, пока не завершится вызов http, поэтому, если вы сразу же регистрируете episodesObj[0], конечно, он не определен.

Chrome сохраняет живые ссылки на не примитивные вещи, которые вы записываете в консоль, поэтому, когда вызовы http в конечном итоге обновляют массив, он также обновляется в консоли, поэтому вы можете просмотреть его позже.

0 голосов
/ 30 апреля 2020

Если вы хотите напечатать окончательный результат, вы можете использовать обещать все

все (обещания);

Объединения несколько обещаний в одно обещание, которое разрешается, когда все входные обещания разрешаются.

Что-то вроде:

var listOfPromises = [];
for(i=1;i<=num_seasons;i++) {      
    listOfPromises.push($http.get('/api/show/<%=show.id%>/season/'+i))     
}


$q.all(listOfPromises).then(function(result){

    // we run this code once all promises are resolved
    for (var i = 0; i < result.length; i++){
        episodesObj.push(result[i]);
    }

   console.log(episodesObj);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...