Angular2:嵌套在观测量后卫(Angular2: Nested Observables in

2019-09-29 18:24发布

我有一个警卫保护某条路。 在canActive方法,我需要做两个http请求,在其第二个是基于第一个响应触发。 然而,第二个请求是从来没有,我以为它是关于返回观测量的嵌套结构。

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      );
     }
   );  
 }

无论木屐()和getB()返回以下内容:

getA() : Observable<any> {
  return this.http.post(URL,payload).
                   map(response => response.json());

};

该代码是简单的,但你可以假设木屐()和getB()正常工作。 木屐()是正常的通过网络发送的,当卫兵被调用,getB()永远不会发送,虽然。 调试器在第5行默默地退出。

还有一两件事,打字稿显示一个警告,可能告诉我已经解决,但是,我是个太过与观测量尤其是菜鸟知道用它做:

Observable<Observable<boolean>>' is not assignable 
to type 'Observable<boolean>'

为了让猜测,观测量的构造从来没有解决,这就是为什么没有警告,我等到地老天荒。 我天真的想法是,只要任何可观察到会返回一个布尔值(如7号线完成),用户会知道如何处理它。

我很高兴地读你的提示。 去睡觉了...

Answer 1:

您应该使用switchMap这里:

return this.provider.getA().switchMap(
  dataA => {
    return this.provider.getB().map(
      dataB => {
        return (dataB.allowed);
      }
    );
  }
);

在代码中,要创建一个可观察观察量。 switchMap变平该结构并通过发射A. B的发射项目



文章来源: Angular2: Nested Observables in Guard