Как я могу отменить запрос после subscribe() в приложении Angular ???
Как обычно, я использую unsubscribe() или takeUntil() для отмены моих запросов нравится.
Но я понятия не имею, почему в этом случае не работает:
userSubscription$: Subscription;
loadUser(userId: number) {
// Cancel request
if (this.userSubscription$) { this.userSubscription$.unsubscribe(); }
// Load user
this.userSubscription$ = this.userService.getUser(userId).subscribe((user: User) => {
// ...
});
}
И getUser в службе с Http:
getUser() {
const url = '...';
return this.http.get(url)
}
Я пробовал с обычными решениями, но он только отменяет Observable (означает, что он ничего не делал после загрузки, но запросы все еще загружаются => Сделать мой сайт медленным).
Есть идеи, почему это происходит?
For more information, I'm using:
- Angular 4.0.0
- Using HttpModule for sending request (not HttpClientModule)
Спасибо за помощь!
@DavidWalschots, я обновил свой вопрос выше. Это простой способ отправить запрос как обычно.
Я сам сделал небольшое приложение, которое правильно отменяет HTTP-запросы. Конечно, если запрос завершится до того, как вы его отмените, он не будет отменен. Может быть, loadUser вызывается очень быстро или запрос завершается очень быстро, потому что он находится на локальном хосте? Что произойдет, если вы установите в браузере более низкую скорость сети с помощью инструментов разработчика?
Я понял твою идею. Но я отменил его до того, как запрос будет завершен (потому что запрос очень медленный).





После того, как HTTP-запрос вернул вам ответ, и вы хотите отказаться от подписки, лучше всего использовать оператор take, попробуйте следующее:
this.userService.getUser(userId).take(1) subscribe((user: User) => {
// ...
});
Импортируйте оператор take из rxjs в зависимости от вашей угловой версии.
Я хочу удалить старый запрос, прежде чем отправлять новый. Не ждать возврата HTTP-запроса.
Какой код в
getUser?