我正在使用 Angular 2 和 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(..)
}
}
现在首先无法工作,因为 AuthService
中的 login
现在返回 Subscription
对象,而不是 Observable
code>,此外,如果采用 login
函数并像这样重构它:
login(cred) {
var obs = this.http.post(url, cred)
obs.subscribe(res=> this.onLoginSuccess())
retrun obs
}
这会导致 http 请求调用两次..
所以我的问题是:我如何知道我的 loginPage
调用 onLoginSuccess
的订阅者已完成?
如何避免两次请求?
最佳答案
怎么样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;
}
}
关于http - 使用 Angular 和 HTTP 了解 rxjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209122/