使用 Angular 4 取消 http 请求



如何在 Angular 应用程序中subscribe()后实际取消请求???

像往常一样,我使用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) => {
// ...
});
}

并使用 Http 获取服务中的用户:

getUser() {
const url = '...';
return this.http.get(url)
}

我尝试使用普通解决方案,但它只取消Observable(意味着它在加载后没有做任何事情,但请求仍在加载 => 让我的网站很慢(。

知道为什么会这样吗?

有关更多信息,我正在使用:

  • 角度 4.0.0
  • 使用 HttpModule 发送请求(不是 HttpClientModule(

谢谢你帮助我!

一旦 HTTP 请求返回了响应并且您想要取消订阅,最好的主意是使用 take 运算符,请尝试以下操作:

this.userService.getUser(userId).take(1) subscribe((user: User) => {
// ...
});

从 rxjs 导入 take 运算符,具体取决于您的角度版本。

最新更新