Некорректно отображаются данные выгруженные из API

В рамках одного тестового задания делал небольшой сайт, куда из https://swapi.dev выгружаются планеты, а при нажатии на планету отображаются данные по планетам.

С отображением планет вопросов нет, все выгружается. Но вот в отображении данных по планетам есть вопрос. Все данные внутри api планеты - имеют конкретные значения, кроме резидентов, там ссылка.

Поэтому было принято решение делать запрос внутри запроса, реализовано это примерно так:

function fetchPlanet(id){
    'use strict';
    fetch(`http://swapi.dev/api/planets/${id}`)
      .then( function(response){
        return response.json()
      })
      .then(function(json){
        console.log("data", json)
  
        if (!json.name){
          return;
        }
            
        const name = json.name;
        const population = json.population;
        const rotation_period = json.rotation_period;
        const orbital_period = json.orbital_period;
        const terrain = json.terrain;
        const residents = json.residents;

        for (var key in residents) {
            fetch (residents[key])
                .then(function(response){
                    return response.json()
                })
                .then(function(json){
                    console.log("data", json)

                    if (!json.name){
                        return;
                    }

                const resName = json.name;
                const resGender = json.gender;

                    const html = `
                            
                    <div class="person flex">
                        <div class="person_name">Name: ${resName}</div>
                        <div class="person_gender">Gender: ${resGender}</div>
                    </div>
                            
                    `
                    document.querySelector("#residents").insertAdjacentHTML('beforeend', html)
                })
            //alert("Ключ: " + key + " значение: " + residents[key] );
        }
        
        const html = `
        <div class="character flex">
            <a class="planet_card flex" href="#${name}">
                <h2 class="planet_title title-reset">${name}</h2>
            </a>
            
            <a href="#x" class="overlay" id="${name}"></a>
            <div class="popup">
                <div class="globe-container ${terrain}_small">
                </div>
                <ul class="planet_list list-reset flex">
                    <li class="planet_list_item flex">
                        <div class="planet_name flex">${name}</div>
                    </li>    
                    <li class="planet_list_item flex">
                        <h4 class="param_title flex">Rotation Period:</h4>
                        <div class="param_deskr">${rotation_period} hours</div>
                    </li>
                    <li class="planet_list_item flex">
                        <h4 class="param_title flex">Orbital Period:</h4>
                        <div class="param_deskr">${orbital_period} days</div>
                    </li>
                    <li class="planet_list_item flex">
                        <h4 class="param_title flex">Terrain:</h4>
                        <div class="param_deskr">${terrain}</div>
                    </li>
                    <li class="planet_list_item flex">
                        <h4 class="param_title flex">Population:</h4>
                        <div class="param_deskr">${population} inhabitants</div>
                    </li>
                    <li class="planet_list_item">
                        <h4 class="param_title resid">Residents:</h4>
                        <div class="param_deskr flex">
                            <div class="residents flex" id="residents"></div>
                        </div>
                    </li>
                </ul>
                <a class="close"title="Закрыть" href="#close"></a>
            </div>
        </div>`
        
        document.querySelector("#characters").insertAdjacentHTML('afterbegin', html)

    })

}
  
  for (var i = 1; i <= 100; i++) {
    fetchPlanet(i)
}

Проблема заключается, что при запуске алгоритм как-то сам выбирает какие планеты прогонять через повторный запрос, в общем не могу разобраться.


Ответы (0 шт):