rxjs:用管道返回值(map)

时间:2018-05-16 15:34:49

标签: javascript angular rxjs reactivex

如何在使用管道和地图时返回值,如本例所示:

return this.service.someEvent().pipe(
  map(x => {
    return this.service.someValue;
  })
)

但是永远不会返回该值,因为从未将事件子列入事件,如果我像这样使用它:

const a = this.service.someEvent().pipe(
  map(x => {
    return this.service.someValue;
  })
)

return a.subscribe();

我收到错误(我知道这是错误的)。

TS2322: Type 'Subscription' is not assignable to type 'boolean | Observable<boolean> | Promise<boolean>'.   Type 'Subscription' is not assignable to type 'Promise<boolean>'.     Property 'then' is missing in type 'Subscription'.

所以我需要我的方式来返回值。

更新: 更好的描述(我需要使用最新版本的rxjs复制此代码):

canActivate(next: ActivatedRouteSnapshot,
               state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  return this.service.something().map(x => {
    if (x) {
      return true;
    } else {
      return false;
    }
  })

}

需要使用管道内的地图(据我所知)。

1 个答案:

答案 0 :(得分:1)

你可以简单地从“canActivate”后卫那里返回observable本身: -

canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
  return this.service.something().pipe(map(x => {
    if (x) {
      return true;
    } else {
      return false;
    }
  }));
}

只有在返回的observable完成且其发出值为true后,路由才会继续。因此,您实际上不必担心订阅该可观察角度路由器将自己处理它。