Sobes.tech
Back to questions
Middle
1

fetchAll(['url1', 'url2'], (results) => { console.log('Данные по всем ссылкам', results); }); function fetchAll(urls) { const promises = urls.map((url) => { fetch(url).then((res) => res.json()) }) const data = Promise.all(promises).then((response) => { if (!response.ok) { throw new Error('error') } return response }) console.log(data) }

Companies where asked
WildberriesWildberries

Answer from AI

sobes.tech AI

В представленном коде есть несколько ошибок и недочётов:

  1. В функции fetchAll отсутствует возврат промиса из urls.map, из-за чего массив promises будет содержать undefined.
  2. Проверка response.ok не имеет смысла, так как response — это массив результатов, а не объект ответа.
  3. Функция fetchAll принимает два параметра, но во втором параметре (callback) не используется.

Исправленный вариант функции с использованием промисов и колбэка:

function fetchAll(urls, callback) {
  const promises = urls.map(url => 
    fetch(url).then(res => {
      if (!res.ok) {
        throw new Error(`Ошибка загрузки ${url}: ${res.status}`);
      }
      return res.json();
    })
  );

  Promise.all(promises)
    .then(results => callback(results))
    .catch(error => console.error('Ошибка при загрузке данных:', error));
}

fetchAll(['url1', 'url2'], (results) => {
  console.log('Данные по всем ссылкам', results);
});

Такой подход гарантирует, что все запросы будут выполнены параллельно, и после успешного завершения всех вызовется колбэк с массивом результатов.