[英]How to chain/combine Observables
好的,这困扰了我一段时间,想知道是否有人可以向我展示一种在多个服务之间链接Observable的好方法。
在下面的Auth类示例中,从this.api.postSignIn()
创建Observable的一种好方法是什么,以便signInSubmit()
可以在组件中重新订阅它? 值得注意的是this.api.postSignIn()
正在订阅Angular2 http请求。
这是一种反模式吗?是否有更好的方法可以做到这一点?
基本上,我想实现的功能是:
服务-进行api调用以获取令牌,通过令牌服务设置令牌并设置isSignedIn
bool,然后将控制权交还给调用组件。
@Component({...}) export class SignIn { private signIn:SignInModel = new SignInModel(); constructor(private auth:Auth, private router:Router) { } ngOnInit() { } signInSubmit() { this.auth.signIn(this.signIn) .subscribe( () => { this.router.navigate(['/admin']); } ) } } @Injectable() export class Auth { private isSignedIn:boolean = false; constructor(private api:Api, private tokenService:TokenService) { } public signIn(signIn:SignInModel) { return this.api.postSignIn(signIn) .subscribe( response => { this.tokenService.set(new TokenModel(response.token)); this.isSignedIn = true; }, error => { console.log(error); } ); } public signOut() { } }
我会利用do
和catch
运算符,而不是在signIn
方法中进行订阅。
这是重构的signIn
方法:
public signIn(signIn:SignInModel) {
return this.api.postSignIn(signIn)
.do(
response => {
this.tokenService.set(new TokenModel(response.token));
this.isSignedIn = true;
})
.catch(
error => {
console.log(error);
}
);
}
你的情况,你不能这个方法返回的对象,因为订阅subscribe
方法返回一个订阅,而不是一个可观察的。 所以你不能订阅...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.