Запустите независимые запросы параллельно, затем соедините посты с авторами и количеством комментариев через индексы по ID.
Запросите данные о постах, комментариях и пользователях по трём API-адресам и соберите единый массив объектов: id и title поста, имя автора и количество комментариев к посту.
Запустите независимые запросы параллельно, затем соедините посты с авторами и количеством комментариев через индексы по ID.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Запустите независимые запросы параллельно, затем соедините посты с авторами и количеством комментариев через индексы по ID.
Ниже предполагаются массивы posts(id,title,userId), users(id,name), comments(postId); URL передаются аргументами.
async function loadPosts(postsUrl, commentsUrl, usersUrl) {
const read = async url => {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
if (!Array.isArray(data)) throw new TypeError('Expected array');
return data;
};
const [posts, comments, users] = await Promise.all(
[postsUrl, commentsUrl, usersUrl].map(read)
);
const names = new Map(users.map(user => [user.id, user.name]));
const counts = new Map();
for (const comment of comments) {
counts.set(comment.postId, (counts.get(comment.postId) ?? 0) + 1);
}
return posts.map(post => ({
id: post.id, title: post.title,
authorName: names.get(post.userId) ?? null,
commentsCount: counts.get(post.id) ?? 0
}));
}
Индексация избегает повторного полного поиска для каждого поста. Для иных DTO нужно явно изменить имена полей и проверку схемы.