2016-03-24 12 views
2

角度2とrxjsで作業しようとすると問題が発生しました。取る場合addtionalのでは、今Subscription対象としませObservableを返してAuthServicelogin以来初めて、すべての文句を言わない仕事の今角度とHTTPを使用したrxjsの理解

class LoginPage{ 
    ctor(private auth:AuthService) {} 

    login(cred) { 
     this.auth.login(cred).subscribe(res=> this.navigateToHome() 
    } 
} 

class AuthService { 
    ctor(private http:AuthHttp) {} 

    login(cred){ 
     return this.http.post(url, cred).subscribe(res => this.onLoginSuccess()) 

    } 
} 

class AuthHttp extends Http { 
    ctor (.....) 

    post(...) { 
    // Add some headers 
     return super.post(..) 
    } 
} 

イムは、基本的なログインをやろうとしている。ここのコードですlogin機能とそのようにリファクタリング:

login(cred) { 
    var obs = this.http.post(url, cred) 
    obs.subscribe(res=> this.onLoginSuccess()) 
    retrun obs 
} 

これを2回呼び出すためのHTTPリクエストを引き起こす。..

私の問題は、を呼び出すサブスクライバが完了したloginPageのIMをどうすれば知ることができますか?

どうすれば2回のリクエストを避けることができますか?

答えて

3

share()

AuthService.login()を購読する必要がある場合、login()Observableを返す必要があります。しかし、あなたはまた、AuthServiceのログイン中に何かをする必要がありますか? share()AuthServiceのログイン時に登録し、Observableを返します。

class AuthService { 
    ctor(private http:AuthHttp) {} 

    login(cred){ 
     var result = this.http.post(url, cred).share(); 
     result.subscribe(res => this.onLoginSuccess()) 
     return result; 
    } 
} 
+0

もう少し詳しくお聞かせください。これと 'do'の違いは何ですか? – tubu13

関連する問題