Запросите данные о постах, комментариях и пользователях по трём API-адресам и соберите единый массив объектов: id и title поста, имя автора и количество комментариев к посту.

Запустите независимые запросы параллельно, затем соедините посты с авторами и количеством комментариев через индексы по ID.

Короткий ответ

Что ответить на собеседовании

Запустите независимые запросы параллельно, затем соедините посты с авторами и количеством комментариев через индексы по 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 нужно явно изменить имена полей и проверку схемы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее