[英]Angular2: Nested Observables in Guard
我有一个卫队保护某条路线。 在canActive
方法中,我需要发出两个http请求,根据第一个响应触发第二个请求。 但是,第二个请求永远不会发生,我认为它是关于返回Observables的嵌套构造。
1 canActivate(route: ActivatedRouteSnapshot,
2 state: RouterStateSnapshot) : Observable<boolean>|boolean {
3 return this.provider.getA().map(
4 dataA => {
5 return this.provider.getB().map(
6 dataB => {
7 return (dataB.allowed);
8 }
9 );
}
);
}
getA()和getB()都返回以下内容:
getA() : Observable<any> {
return this.http.post(URL,payload).
map(response => response.json());
};
代码已简化,但您可以假设getA()和getB()正常工作。 调用Guard时,getA()在网络上发送,但是从不发送getB()。 调试器在第5行静默退出。
还有一件事,TypeScript显示了一个可能已经告诉我解决方案的警告,但是,我太多了Noob with Observables特别知道如何处理它:
Observable<Observable<boolean>>' is not assignable
to type 'Observable<boolean>'
为了猜测,Observables的构造永远不会解决,这就是没有警告的原因,我等到时间结束。 我天真的想法是,只要任何Observable都返回一个布尔值(如第7行所做),订阅者就会知道如何处理它。
我很高兴看到你的提示。 去睡觉了...
你应该在这里使用switchMap
:
return this.provider.getA().switchMap(
dataA => {
return this.provider.getB().map(
dataB => {
return (dataB.allowed);
}
);
}
);
在您的代码中,您正在创建一个Observable of Observables。 switchMap
平该结构并发出B到A的发射项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.