async function loadUsers(ids) {

forEach не ждёт async-callbacks, поэтому loadUsers возвращает массив до завершения запросов; используйте Promise.all с map или последовательный цикл.

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

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

forEach не ждёт async-callbacks, поэтому loadUsers возвращает массив до завершения запросов; используйте Promise.all с map или последовательный цикл.

Подробный разбор

Ответ с пояснениями

Условие

async function loadUsers(ids) { const users = [] ids.forEach(async id => { const res = await fetch(/api/users/${id}) const user = await res.json() users.push(user) }) return users }

Identify the problem with this code and suggest how to fix it.

Ответ

forEach не ждёт async-callbacks, поэтому loadUsers возвращает массив до завершения запросов; используйте Promise.all с map или последовательный цикл.

Параллельный вариант сохраняет порядок ids и явно проверяет HTTP-статус:

async function loadUsers(ids) {
  return Promise.all(ids.map(async id => {
    const res = await fetch(`/api/users/${encodeURIComponent(id)}`);
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    return res.json();
  }));
}

Для большого списка ограничьте параллелизм. Promise.all отклоняется при одной ошибке, но сам не отменяет остальные fetch.

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

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

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

Подробнее