Код:

Импортированная карта и карта переключения

 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

Могу ли я узнать, что является причиной этой ошибки. Заранее спасибо

0
Kiran Dash 1 Май 2019 в 14:49

3 ответа

Лучший ответ

Эта строка кода с оператором карты RxJS должна быть вложена в ваш {{X0 } } .

canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(
        switchMap((user: firebase.User) => this.userService.fetch(user.uid)),
        map((user) => user.isSeller)
     )
  }
4
Kiran Dash 1 Май 2019 в 12:04

При использовании pipe добавьте все операторы внутри, разделенные запятыми.

 canActivate(): Observable<boolean> {
    return this.auth.userObservable
      .pipe(switchMap((user: firebase.User) => this.userService.fetch(user.uid))
      , map((user) => user.isSeller));
  }
3
Kiran Dash 1 Май 2019 в 12:05

Вы получаете эту ошибку, потому что вы вызываете 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)
      );
}
2
Jota.Toledo 1 Май 2019 в 12:07