繁体   English   中英

Angular2:Guard中的嵌套Observable

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM