Получение ошибки, присваиваемой параметру типа - PullRequest
0 голосов
/ 02 октября 2018

Я использую "rxjs": "~ 6.2.0" в блоке кода ниже

    canActivate():Observable<boolean>
     {
      return this.auth.user$.pipe
      (
        switchMap( 
                 user => 
                   {
                   return this.userService.get(user.uid);
                   }
                 )
       ).pipe( map( appUser => appUser.isAdmin))
     }

Метод get userService имеет следующую логику.

    get(uid : string): AngularFireObject<AppUser>
      {
        return this.db.object('/users/'+ uid);
      }

Я получаюошибка

"Аргумент типа '(пользователь: пользователь) => AngularFireObject' не может быть назначен параметру типа '(значение: пользователь, индекс: число) => ObservableInput'. Тип 'AngularFireObject'нельзя назначить типу «ObservableInput». Тип «AngularFireObject» нельзя назначить типу «Iterable». Свойство «[Symbol.iterator]» отсутствует в типе «AngularFireObject». "

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Аргумент, передаваемый SwitchMap, должен быть Observable, но this.userService.get(user.uid) возвращает AngularFireObject<AppUser>.

AngularFireObject от AngularFire.Я не использовал AngularFire, но из того, что я получил, вы должны позвонить valueChanges() на AngularFireObject, чтобы получить Observer.Поэтому, если вы можете изменить UserService, он должен выглядеть следующим образом:

get(uid : string): Observable<AppUser>
{
    return this.db.object('/users/'+ uid).valueChanges();
}

И, как упоминал Амит Чигадани, вы должны поместить switchMap и map в один канал, а также упростить функцию стрелки вswitchMap.

0 голосов
/ 02 октября 2018

Вам не нужно использовать две трубы здесь, map результат appUser.isAdmin, использующий одну и ту же трубу.

canActivate():Observable<boolean>
{
      return this.auth.user$
       .pipe(
           switchMap(user => this.userService.get(user.uid)), 
           map(appUser => appUser.isAdmin)
       )
}

Также вы должны изменить userService.get(), чтобы получить правильные Observable, которые вы получаете отvalueChanges()

get(uid : string): Observable<any>
{
     return this.db.object('/users/'+ uid).valueChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...