Проверяет умение параллельно запрашивать несколько API-эндпоинтов и объединять результаты по общим идентификаторам, что важно для построения агрегированных данных на клиенте или сервере.
Когда данные о сущности разбросаны по нескольким API, их нужно собрать вместе. Например, список пользователей приходит с одного эндпоинта, а их заказы — с другого. Связующим полем обычно выступает идентификатор (userId, orderId и т.п.).
Первое, что стоит сделать — не ждать ответы последовательно, а запустить их одновременно через Promise.all. Это сокращает общее время ожидания до самого медленного запроса.
Чтобы объединение было быстрым, один из массивов превращают в словарь по ключу. Тогда поиск нужной записи занимает O(1), а общая сложность остаётся линейной.
async function mergeData() {
const [users, orders] = await Promise.all([
fetch('/api/users').then(r => r.json()),
fetch('/api/orders').then(r => r.json())
]);
// Индекс заказов по userId
const ordersByUser = new Map();
for (const order of orders) {
if (!ordersByUser.has(order.userId)) {
ordersByUser.set(order.userId, []);
}
ordersByUser.get(order.userId).push(order);
}
// Объединяем
return users.map(user => ({
...user,
orders: ordersByUser.get(user.id) || []
}));
}
Promise.all падает целиком при одной ошибке — если это недопустимо, используйте Promise.allSettled.Такой подход применяется в дашбордах, лентах, профилях пользователей и любых экранах, где нужно показать связанные сущности из разных сервисов. Итог: используйте параллельные запросы плюс индекс по ключу — это просто, быстро и предсказуемо по сложности.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
Networks
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию