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

初学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需不需要在页面销毁前取消订阅,为什么?还有哪些这样的订阅需要取消或者不需要取消,希望有人能给我讲讲,给个链接也行。多谢!

阅读 4.7k
5 个回答

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

新手上路,请多包涵

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

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

不需要取消。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏