@sheeel

Как исправить ошибку при большом количестве fetch запросов?

let results = await Promise.all(filteredMatches.map((v) => handler(v.CI)))

handler - отправляет запрос на сервер и возвращает нужные данные
но тк одновременно отправляется много запросов(40-50) возвращет ошибку FetchError: invalid json response body at
Можно как то это исправить потому что если отправлять последовательно через какой либо цикл это займет много времени?
  • Вопрос задан
  • 156 просмотров
Решения вопроса 1
MvcBox
@MvcBox
Software Engineer [C/C++/JS(for Node.js)/etc]
Есть удобная библиотека bluebird
bluebirdjs.com/docs/api/promise.map.html
Для map есть опция concurrency.
Соответственно, Ваш код можно переписать так:
const Promise = require('bluebird');
let results = await Promise.map(filteredMatches, v => handler(v.CI), { concurrency: 10 });

Вместо 10 можете указать любое удобное количество "потоков".
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Можно.
Купить сервер пошустрее, или купить побольше серверов.

Или научиться хоть немного думать о производительности еще на этапе проектирования :)

UPD: sheeel, вот ты мне не веришь, хотя скорее всего зря. Я там в комментах писал как проверить.

Попробую объяснить на пальцах что такое оверхед, и где у тебя архитектурный косяк.

Представь себе автомеханика, который ковыряется под капотом автомобиля, и у него есть паренек стажер на подхвате. И вот механик говорит стажеру - псс, парень, нужна гайка на 13!
И парень бежит на склад (недалеко, 20 метров всего), и говорит складовщику: нужна гайка на 13! Складовщик открывает книгу учета складских материалов, смотрит где у него хранятся гайки, идет к нужному стеллажу, открывает коробочку, вынимает гайку, кладет в пакетик, возвращается, отдает парню гайку, и записывает в журнал, что мол по запросу такого-то выдана гайка на 13, 1 штука, хотя парень уже убежал.

И все счастливы.

А потом вдруг слесарю понадобилось 50 гаек. И он 50 раз посылает помощника за гайками. И каждый раз парень носит по одной. И кладовщик (он чуток поумнее этого парня), уже не заглядывает в журнал чтобы узнать какой стеллаж ему нужен, у кладовщика для этого кеш в голове есть! Но он вынужден все равно открывать коробочку, вынимать гаечку, и записывать в журнал. Он бы и рад отдать 50 гаек в одном пакете, он так умеет! Но он четко следует инструкциям. Запрошена одна гайка - вот вам одна. А потом после 20 гаек у кладовщика обед, и парень возвращается не с гайкой, а invalid response.

Так вот, вы почему-то решили, что все упирается в скорость, с которой паренек бежит к складу и от склада. Это тоже важно, осбенно если склад далеко. Inviz Custos и Максим Зайцев подсказывают вам, что нужно больше пареньков, и как правильно их поставить в очередь у окошка. Это тоже важно, ага.

Но гораздо круче было бы запросить все 50 гаек за один раз.
Ответ написан
Ваш ответ на вопрос

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

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