Angular2 需不需要取消对http.get的订阅?

发布于 2022-09-06 20:31:32 字数 941 浏览 16 评论 0

初学Angular2和Rxjs,对Rxjs的函数式编程的了解还不是很清晰。在写angular2 http的demo
时遇到了一些疑惑。

service.ts

Login(username: string, password: string): Observable<User> {
    return this.http.request(environment.apiUrl + '/Login', {
      method: RequestMethod.Post,
      responseType: ResponseContentType.Json,
      body: {
        username: username,
        password: password,
      }
    })
      .map(response => response.json() as User)
  }

login.component.ts

  onLoginBtnClick() {
    const subscription = this.loginService.Login('admin', 'admin')
      .subscribe(user => {
        this.router.navigate(['/home']);
      }, error => {
        console.log(error);
      });
  }

上面的代码实现了一个简单的登录请求。Login方法返回一个Observable对象,调用subscribe方式执行请求。在订阅类似按钮点击事件时,为了防止内存泄露,需要在页面销毁前取消订阅。 我不明白的是,这样实现的http请求的subscription需不需要在页面销毁前取消订阅,为什么?还有哪些这样的订阅需要取消或者不需要取消,希望有人能给我讲讲,给个链接也行。多谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

独自←快乐 2022-09-13 20:31:32

这个不需要。
常用的场景可以看这篇文章:https://segmentfault.com/a/11...

攒眉千度 2022-09-13 20:31:32

angularhttp服务所返回的Observable,会在获取到数据或者出错后自动关闭,不需要手动去关闭它。

不忘初心 2022-09-13 20:31:32

Observable 的实例有多种,只有在实例没有结束之前,希望取消订阅,才需要处理取消订阅的问题。
对于 Angular 中的 Http 来说,它只能 emit 一次,在请求完成之后,就自动 complete 了。所以,不用取消注册。

隱形的亼 2022-09-13 20:31:32

有人帮你取消的就不需要,如async管道,angular框架会帮你取消,流上发出了complete通知的,rxjs会帮你取消。

椒妓 2022-09-13 20:31:32

不需要取消。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文