Back to questions
Wildberries
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
Answer from AI
sobes.tech AI
В представленном коде есть несколько ошибок и недочётов:
- В функции
fetchAllотсутствует возврат промиса изurls.map, из-за чего массивpromisesбудет содержатьundefined. - Проверка
response.okне имеет смысла, так какresponse— это массив результатов, а не объект ответа. - Функция
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);
});
Такой подход гарантирует, что все запросы будут выполнены параллельно, и после успешного завершения всех вызовется колбэк с массивом результатов.