2
最近、Angularがコンポーネントを破壊する前にサブスクリプションの登録を解除する必要があることを知りました。そうしないとメモリリークが発生する可能性があります。Angular 2 Subscribe/Unsubscribe httpコールの場合のオブザーバブル
私は、サブスクリプションへの参照を取得でき、サブスクリプションでsubscribeメソッドを呼び出すことができます。たとえば、
private sub: any;
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
let id = +params['id']; // (+) converts string 'id' to a number
this.service.getHero(id).then(hero => this.hero = hero);
});
}
ngOnDestroy() {
this.sub.unsubscribe();
}
これはHTTPコールの場合にも必要ですか? 「はい」の場合は、この場合のベストプラクティスは何ですか。
たとえば、私たちは通常、HTTPを通じていくつかのデータを投稿するには、このような何かを持っている
let body = JSON.stringify({ name });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
this.http.post(this.heroesUrl, body, options)
.map(this.extractData)
.subscribe((data) => {
//do something with data
})
.catch(this.handleError);
下記の仕事、それはHTTP呼び出しの場合に解除するための最良の方法ですか?
private sub: any;
.....
....
this.sub = this.http.post(this.heroesUrl, body, options)
.map(this.extractData)
.subscribe((data) => {
//do something with data
this.sub.unsubscribe();
})
.catch(this.handleError);
をクリーンアップは、ここで自動的に発生するだけでなく、いつでも 'Observable'が完了起こります。 'http'要求は、その性質上、1つの値しか出さないので、常に完了します。したがって、' Observable'チェーンはそれ自身をクリーンアップします。ここで私の答えを参照してくださいhttp://stackoverflow.com/a/41177163/939634 – seangwright
httpの呼び出しが行われたがまだ返されていない、ユーザーがビューを離れる場合はどうなりますか?私はその場合、あなたは迷惑なサブスクリプションが残っていると思いますか? – Thibs