Ваша проблема в том, что в RxJs 6 switchMap
(наряду со многими другими операторами) больше не существует в Observable.Вместо этого вы должны передать наблюдаемое с помощью оператора .pipe()
, который принимает любое количество методов и применяет их к наблюдаемому.Затем вы импортируете функцию switchMap
, чтобы использовать ее в конвейере.
import { switchMap } from 'rxjs/operators';
....
this.currentUser = this.afAuth.authState.pipe(
switchMap((user) => {
if (user) {
return this.db.doc<User>(`users/${user.uid}`).valueChanges();
} else {
return of(null);
})
);
Если вы привыкли к старому (RxJs 5) поведению и хотите работать так, как есть пакетназывается rxjs-compat
(установите его с npm install rxjs-compat
), что позволяет использовать RxJs 6+ со старым синтаксисом.
Однако при использовании более нового синтаксиса наблюдается существенный выигрыш в производительности и размере пакета, поскольку он поддерживает TreeТрясет, поэтому я бы не советовал.