Angular:canActivate:类型'OperatorFunction'上不存在属性'map'

问题描述 投票:0回答:3

码:

导入的地图和switchMap

 import { map, switchMap } from 'rxjs/operators';

canActivate路由防护的代码:

  canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(switchMap((user: firebase.User) => this.userService.fetch(user.uid))
      .map((user) => user.isSeller));
  }

我收到错误属性'map'在类型'OperatorFunction'上不存在。请看下面的截图。

截图:

enter image description here

enter image description here

我的尝试:用管道包裹地图没有用。

canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(switchMap((user: firebase.User) => this.userService.fetch(user.uid))
      .pipe(map((user) => user.isSeller)));
  }

我不确定这是否是正确的语法,但上面的也会抛出错误。

enter image description here

我可以知道导致此错误的原因。提前致谢

angular typescript rxjs
3个回答
4
投票

使用RxJS's map operator的那行代码应该嵌套在你的pipe()中。

canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(
        switchMap((user: firebase.User) => this.userService.fetch(user.uid)),
        map((user) => user.isSeller)
     )
  }

3
投票

使用管道时,请用逗号分隔内部的所有操作符。

 canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(switchMap((user: firebase.User) => this.userService.fetch(user.uid))
      , map((user) => user.isSeller));
  }

2
投票

您收到该错误是因为您在map(没有名为switchMap的成员)返回的函数上调用map,因为您错误地关闭了括号。

要使用可管理的运算符,通常会将它们的调用连接为pipe的参数:

obs$.pipe(op1(...),op2(...),...,opN(...));

应用于您的代码,您需要重构为:

canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(
         switchMap((user: firebase.User) => this.userService.fetch(user.uid)),
         map(user => user.isSeller)
      );
}
© www.soinside.com 2019 - 2024. All rights reserved.