2017-02-04 4 views
0

Когда я console.log(accomdationSearchResultsData.length); я всегда получаю длину 0 в консоли, но есть на самом деле 2 объектаДлина объекта всегда 0

Объект

enter image description here

Пример кода

accommodationById() { 
    var accomdationSearchResultsData = []; 
    var hotelSearchCount = 0; 

    this.api.accommodationById(this.accomodationId).subscribe(accomdationResponse => { 
     var accomdation_id, accomdation_type, accomdation_hotel, accomdation_id, accomdation_rate, accomdation_hotel_id, accomdation_hotel_name, accomdation_hotel_city, accomdation_hotel_street, accomdation_hotel_state, accomdation_hotel_checkin_time, accomdation_hotel_checkout_time; 

     var accomdation_id = accomdationResponse.id; 
     var accomdation_type = accomdationResponse.name; 
     this.accomodationType = accomdation_type; 

     for (var i = 0; i < accomdationResponse.Rooms.length; i++){ 
      accomdation_hotel = accomdationResponse.Rooms[i].hotel; 
      accomdation_rate = accomdationResponse.Rooms[i].rate; 

      this.api.getHotelByAPI(accomdation_hotel).subscribe(hotelResponse => { 

      accomdation_hotel_id = hotelResponse.id; 
      accomdation_hotel_name = hotelResponse.name; 
      accomdation_hotel_city = hotelResponse.city; 

      accomdationSearchResultsData.push({ 
       accomdation_id: accomdation_id, 
       accomdation_type: accomdation_type, 
       accomdation_hotel: accomdation_hotel, 
       accomdation_rate: accomdation_rate, 
       accomdation_hotel_id: accomdation_hotel_id, 
       accomdation_hotel_name: accomdation_hotel_name, 
      }); 
      }); 
     } 

     this.accomodationResults = accomdationSearchResultsData; 
     console.log(accomdationSearchResultsData.length); 
    }); 
} 
+2

метод подписки является асинхронным, поэтому вы должны переместить консольный вызов в рамках метода подписки –

+1

См. Ответы на связанный вопрос по основной проблеме. Причина, по которой вы видите, что вы видите в консоли, находится здесь: http://stackoverflow.com/questions/38660832/element-children-has-elements-but-returns-empty-htmlcollection –

ответ

-2

попробовать это

setTimeout(function() { 
     console.log(accomdationSearchResultsData.length); 
    }, 2000); 

я думаю, что вы просто зарегистрировать ее, прежде чем процесс будет сделано.

+2

Это очень хрупкий решение, он ждет всего 2 секунды. Если ваш вызов API занимает больше 2 секунд, это не сработает. – Soviut

+0

Я только дал ему код из-за тестирования. Это не решение, я знаю это. Теперь он понял, что проблема - это время, и он должен запустить некоторую функцию onload. – BARNI

Смежные вопросы