2016-07-24 8 views
1

私は一度だけ必要なアプリケーションの開始時に既存のログインをチェックしています。初めてサブスクリプションをキャンセルするにはどうすればよいですか?私はtake(1)を試みましたが、うまくいかないようです。最初の時間後に観測可能なデータを取り消します - Angular2、TypeScript、rxjs/Observable

this.auth.getUserData().take(1).subscribe(data => { // the take(1) doesn't work 
    console.log('Firebase responded with success.'); 
    this.rootPage = TabsPage; 
}, err => { 
    console.log('Firebase responded with error.', err); 
    this.rootPage = LoginEmailPage; 
} 
); 
+1

「うまくいかない」という意味を教えてください。それは実際にあなたのサブスクリプションハンドラを複数回呼びますか?なぜサブスクリプションをキャンセルしたいのですか?観察可能なものが完成すれば十分ではありませんか? –

答えて

2

は、モジュールレベルであなたの輸入によっては代わりにtake(1)

first()を試してみましたが、あなたはこれがしますが最初オペレータ

import 'rxjs/add/operator/first' 

のインポートを追加することもできます実際にサブスクリプションをキャンセルするわけではありません、それは私が意味していたと信じている観察を完了します。

EDIT:もともとOP

.subscribe(...)の結果によって要求されるサブスクリプションをキャンセルする明示的な方法は、サブスクリプションへのハンドラを返します追加。あなたは明示的にサブスクリプションをキャンセルし、そのハンドルを使用することができますし、コードは次のようになります。

let subscription = this.auth.getUserData().take(1).subscribe(data => { // the take(1) doesn't work 
    console.log('Firebase responded with success.'); 
    this.rootPage = TabsPage; 
    subscription.unsubscribe(); 
}, err => { 
    console.log('Firebase responded with error.', err); 
    this.rootPage = LoginEmailPage; 
} 
); 

それが明示的にこのケースでは、サブスクリプションをキャンセルするために、間違った感じながら、一般的なパターンは、ngOnInit()またはベース内のサブスクリプションを作成することですポストinitイベント、およびngOnDestroy()内の保留中のサブスクリプションをキャンセルします。

+1

'first()'と 'take(1)'は同じ振る舞いです – paulpdaniels

+0

私はOPが探しているものが分かりません。私はサブスクリプションを取り消す方法を具体的に指定する答えを編集します。 –

+2

答えは正しいものと同じです:http://stackoverflow.com/questions/34548924/missing-observable-methods-rxjs-5-0-0-beta-0?noredirect=1&lq=1最近の角度rxjsのインポートを指定する必要があります。 – sathishvj

関連する問題