2017-04-18 6 views
1

値解決後にサブスクリプションが自動的にクリーンアップされますか?私はいくつかのコードを見て、これを見つけた

this.busy = this.service.getInfo().subscribe((info: InfoData[]) => { 
      this.setInfo(info); 
     }); 

busy[ngBusy]ディレクティブの入力値として使用されているタイプbooleanのコンポーネントのプロパティです。明らかに、subscribe()Subscriptionを返します。これはヌルではないため、trueにキャストされます。これにより、モーダルロードポップアップが表示され、情報が解決されると消えるようになります。つまり、その瞬間にthis.busyが間違っていることを意味します。これは、もうSubscriptionオブジェクトが存在しないことを意味しています。

getInfo()メソッド内には、return Observable.of(info)という1行しかありません。infoはスタブ変数です。

質問: データが解決された直後にSubscriptionが自動的に削除されますか?はいの場合は、それはObservable.of()の場合のみですか?そうした動作の他の例がありますか?

+0

チェックこれはSO、それはサブスクリプションをクリーンアップについて詳細にdiscusseds質問http://stackoverflow.com/questions/38008334/angular2-rxjs-when-should-i-unsubscribe-fromサブスクリプション –

+0

この場合は –

+0

一部のサブスクリプションは、Httpサービスで使用されるサブスクリプションやルーティングで使用されるサブスクリプションなど、自動的にクリーンアップされます。他のすべては、購読を解除する必要があります。 – DeborahK

答えて

4

データが解決された直後にサブスクリプションが自動的に削除されますか?

いいえ、そうではありません。 - サブスクリプションオブジェクトはまだ存在します。これは、JavaScriptではオブジェクトが「自分自身を削除できません」という事実によるものです。以下のコードをチェックして、まだサブスクリプションオブジェクトがあることを確認することもできます。ストリームにはそれ以上は添付されませんが、それはまだ存在します。

私はあなたがangular2-busyを使用していると仮定しています - その場合、ドキュメントを詳しく見てください。[ngBusy]はサブスクリプションオブジェクトを評価することができ、ビジー指示の表示を停止しますそのサブスクリプションオブジェクトはが閉じたです。 angular2-busy、これを検出することができます - あなたは、サブスクリプションの最後で、それはまだ存在しますが、非動作/閉状態であることがわかります以下のコード・サンプルで


関連する問題