dolphin23
@dolphin23
Новичок в программировании

Как ускорить fetch в цикле?

Есть массив ссылок по которому я прохожусь в цикле, из этого массива ссылок мне нужно достать первую которая ответила статусом 200, вот что я для этого делаю:
let urls = [some urls...]
let promises = []
let goodResult = null

for(let i = 0; i < urls.length; i++){
    try {
        promises.push(fetch(urls[i]))
    } catch (e) {console.log(e)}
}

await Promise.all(promises).then((results) => {
    for(let i = 0; i < results.length; i++) {
        if (results[i].ok) {
            goodResult = results[i]
            break
        }
     }
})

Можно ли как то оптимизировать этот процесс и как то ускорить запросы?
  • Вопрос задан
  • 257 просмотров
Решения вопроса 1
мне нужно достать первую которая ответила статусом 200

Например, ты можешь вместо Promise.all использовать Promise.any
https://developer.mozilla.org/ru/docs/Web/JavaScri...
Или Promise.race
https://developer.mozilla.org/ru/docs/Web/JavaScri...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zkrvndm
@zkrvndm
Архитектор решений
Здесь не нужен цикл. Используй map:
let urls = [ '/1', '/2', '/3' ];
let promises = urls.map(async url => (await fetch(url)).text());
let results = await Promise.allSettled(promises);

console.log(results);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы