2016-03-24 26 views
2

Açısal 2 ve rxjs ile çalışıyorum ve bir sorunla karşılaşıyorum. alırsak addtional, artık Subscription nesne değil, bir Observable dönüyor AuthService yılında login beri her şeyden önce alışkanlık işin ŞimdiAçısal ve HTTP ile rxjs'yi anlama

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(..) 
    } 
} 

:

Im temel giriş yapmaya çalışan: Burada kodudur login fonksiyonu ve bunu böyle üstlenmeden:

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

Bu iki kez çağırmak için http isteği neden oluyor ..

Yani benim sorunum: benim onLoginSuccess çağrısını yapan abonenin tamamlandığını nasıl öğrenebilirim?

2 zaman isteğinden nasıl kurtulabilirim?

cevap

3

share() nedir?

AuthService.login()'a abone olmanız gerekiyorsa, login()Observable'u döndürmelidir. Ama aynı zamanda AuthService girişinde bir şeyler yapmalısınız, değil mi? share()AuthService içinde oturum açmaya abone olmanıza ve Observable numaralı telefonu iade etmenize izin verir.

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

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

Lütfen biraz daha ayrıntı paylaşabilir miyim? Bu ve 'do' arasındaki fark nedir? – tubu13