Как отменить все ожидающие запросы Http перед вызовом нового запроса Http в angular 6

Я работаю над одним угловым проектом, в котором есть вызов API в последовательности, а ответ API хранится в одной глобальной переменной.

Мой поток API выглядит следующим образом: введите здесь описание изображения

Объяснение:

  1. Пользователь нажимает кнопку первого запроса, затем первый запрос отправляется на сервер.
  2. Прежде чем отображать данные первого запроса в html, пользователь нажимает другую кнопку и делает второй запрос API.
  3. здесь ответ на первый запрос еще не возвращен сервером, и сделайте еще один запрос.
  4. после этого ответ на второй запрос происходит первым.
  5. затем происходит результат первого запроса.
  6. В это время все результаты сольются. но ожидаемый результат таков:
  7. отменить первый запрос и отображать только результат второго запроса.

Есть ли способ сначала отменить все ожидающие запросы, а затем сделать другой запрос. Помогите пожалуйста мне.


person mayur kukadiya    schedule 13.06.2019    source источник
comment
почему бы вам не использовать счетчик с фоном, чтобы пользователь должен был дождаться ответа на 1-й запрос, прежде чем нажимать вторую кнопку   -  person arpit sharma    schedule 13.06.2019
comment
stackoverflow.com/ вопросы/40788163/   -  person Joel Joseph    schedule 13.06.2019
comment
посмотри на карту переключения   -  person enno.void    schedule 13.06.2019
comment
Один из способов добиться этого с помощью оператора rxjs switchMap. learnrxjs.io/operators/transformation/switchmap.html   -  person Vikash B    schedule 13.06.2019


Ответы (1)


Вот как вы можете справиться с этим, используя любое из следующих действий:

а) Лучшим подходом было бы использование счетчика с наложением, поскольку вы должны сообщить пользователю, что он уже инициировал запрос и ожидает ответа.

b) С помощью Observables вы можете использовать «SwitchMap» для отмены ожидающих подписок, см.: SwitchMap

c) Внутри вашего перехватчика храните все входящие запросы в виде пары ключ-значение, если какой-либо запрос с тем же ключом приходит снова, просто отклоните его, однако это отменит последующие аналогичные запросы.

Ура (у)

person yanky_cranky    schedule 13.06.2019
comment
Спасибо за ответ. Я реализую трубу takeUntil в http-запросе, предложенную: stackoverflow.com/questions/46068908/ Я не могу использовать первый метод наложения, потому что не хочу блокировать пользователя. - person mayur kukadiya; 13.06.2019
comment
я бы предпочел switchmap вместо takeUnitl, поскольку помимо накладных расходов в takeUntil вы можете столкнуться с такими проблемами, как утечки и т. д., тогда как switchMap специально разработан для этой цели, чтобы работать только с одной подпиской и отменять другие. - person yanky_cranky; 13.06.2019
comment
извините за поздний ответ, я попробую использовать карту переключения. - person mayur kukadiya; 17.06.2019