natalidv25 / natalidv25.github.io

0 stars 1 forks source link

HW32 #34

Open MarynaBasieva opened 6 months ago

MarynaBasieva commented 6 months ago

Щоб переписати ваш сценарій з використанням методу fetch замість XMLHttpRequest, потрібно змінити спосіб роботи з HTTP-запитами та їхньої обробки. fetch пропонує більш зручний і сучасний інтерфейс для роботи з асинхронними HTTP-запитами через проміси.

const url = "https://jsonplaceholder.typicode.com/posts";

const template = (item) => `

${item.title}

${item.body}

Author:

`;

// Використання fetch для отримання постів fetch(url) .then(response => { if (!response.ok) { throw new Error('Network response was not ok'); } return response.json(); }) .then(posts => { let result = ''; posts.forEach(item => { result += template(item); }); document.getElementById("blog").innerHTML = result;

// Отримання унікальних userId з постів
const userIds = posts.map(post => post.userId);
const uniqueUserIds = [...new Set(userIds)];

// Паралельний запит для отримання інформації про користувачів
return Promise.all(uniqueUserIds.map(id => 
    fetch(`https://jsonplaceholder.typicode.com/users/${id}`)
        .then(response => {
            if (!response.ok) {
                throw new Error('User fetch failed');
            }
            return response.json();
        })
));

}) .then(users => { // Встановлення імен авторів у DOM users.forEach(user => { document.querySelectorAll(.author[data-id="${user.id}"]).forEach(element => { element.textContent = user.name; }); }); }) .catch(error => { console.error('Error:', error); });