在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML5  網(wǎng)絡(luò)安全/ Angular2 需不需要取消對http.get的訂閱?

Angular2 需不需要取消對http.get的訂閱?

初學(xué)Angular2和Rxjs,對Rxjs的函數(shù)式編程的了解還不是很清晰。在寫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);
      });
  }

上面的代碼實現(xiàn)了一個簡單的登錄請求。Login方法返回一個Observable對象,調(diào)用subscribe方式執(zhí)行請求。在訂閱類似按鈕點(diǎn)擊事件時,為了防止內(nèi)存泄露,需要在頁面銷毀前取消訂閱。 我不明白的是,這樣實現(xiàn)的http請求的subscription需不需要在頁面銷毀前取消訂閱,為什么?還有哪些這樣的訂閱需要取消或者不需要取消,希望有人能給我講講,給個鏈接也行。多謝!

回答
編輯回答
生性

angularhttp服務(wù)所返回的Observable,會在獲取到數(shù)據(jù)或者出錯后自動關(guān)閉,不需要手動去關(guān)閉它。

2017年1月2日 00:02
編輯回答
懷中人

Observable 的實例有多種,只有在實例沒有結(jié)束之前,希望取消訂閱,才需要處理取消訂閱的問題。
對于 Angular 中的 Http 來說,它只能 emit 一次,在請求完成之后,就自動 complete 了。所以,不用取消注冊。

2018年7月15日 23:23
編輯回答
祉小皓

不需要取消。。。

2017年10月21日 01:03
編輯回答
鐧簞噯

有人幫你取消的就不需要,如async管道,angular框架會幫你取消,流上發(fā)出了complete通知的,rxjs會幫你取消。

2017年8月29日 05:01
編輯回答
執(zhí)念

這個不需要。
常用的場景可以看這篇文章:https://segmentfault.com/a/11...

2018年7月25日 07:37