Angular 8: разбивка HTTP-запроса вместо отправки единовременно - PullRequest
0 голосов
/ 06 марта 2020

Привет, участники сообщества StackOverflow,

Я работаю над Angular 8. У меня вопрос о том, как разбить мой HTTP-запрос, вместо отправки 1000 запросов за 1 go, я хотел бы есть что-то вроде отправки каждые 50 запросов только за один раз. Я не мог придумать никакого способа достижения этого. Ниже приведены мои фрагменты кода:

for (let i = 0; i < products.length; i++) {
    this.myService.getProductInfoByCountryAndProductId(this.selectedCountries, this.product[i])
    .subscribe(
       (res) => { //get result },
       (error) => { //throw error },
       () => { //do something here });
}

Приведенный выше код вызовет все запросы в 1 go, представьте, если у меня есть 1000 продуктов в массиве products, то есть это будет l oop 1000 раз и 1000 запросов были отправлены на сервер и вызвали проблемы с производительностью. Есть ли способ ограничить клиента не отправлять все запросы в один go?

Я пытался combineLatest, результат не тот, который я хочу. Я хотел попробовать concatMap, но имел в виду, что он будет отправлять HTTP-запрос 1 к 1, и обработка всех продуктов займет много времени. Есть предложения или идеи?

1 Ответ

0 голосов
/ 06 марта 2020

Проблема, которую вы пытаетесь решить, связана скорее с архитектурой, чем с angular возможностями http.

В конце число байтов, обмен которыми происходит через HTTP, будет таким же. Теперь вам нужно выяснить «как».

Если вы хотите уменьшить количество вызовов API, решение может быть настройкой вашего веб-сервиса на прием более чем одного идентификатора продукта, и интерфейс готов к приему. массив вместо индивидуального результата.

...