У меня есть действие, которое получает пользователь firebase от authState.Если пользователь существует, то код возвращает документ, связанный с пользователем.Если нет, то будет возвращено of(null)
:
класс AuthState
ngxsOnInit({dispatch}: StateContext<AuthStateModel>) {
dispatch(SyncAuth);
}
@Action(SyncAuth)
syncAuth({dispatch}: StateContext<AuthStateModel>) {
return this.afAuth.authState.pipe(
switchMap(fireAuth => fireAuth ? this.authService.auth$(fireAuth.uid) : of(null)),
tap(user => dispatch(new PatchUserData(user)))
);
}
класс AuthService
auth$(userId: string): Observable<User> {
if (!userId) {
return of(null);
}
return this.db.doc$(`users/${userId}`).pipe(
map(user => user ? this.transform({...user, id: userId}) : null),
shareReplay(1)
);
}
Выглядит просто, верно?Ну, это не сработает, если ваш плагин Redux Devtools не включен (Да, я знаю, что это странно).
Когда я хочу вернуть наблюдаемое со значением любого типа (например, число, строка,null или даже undefined) внутри оператора switchMap я получаю следующую ошибку:
Uncaught TypeError: Вы указали недопустимый объект, где ожидался поток.Вы можете предоставить Observable, Promise, Array или Iterable.(zone.js: 192)
at subscribeTo (subscribeTo.js:41)
at subscribeToResult (subscribeToResult.js:6)
at SwitchMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/switchMap.js.SwitchMapSubscriber._innerSub (switchMap.js:47)
at SwitchMapSubscriber.push../node_modules/rxjs/_esm5/internal/operators/switchMap.js.SwitchMapSubscriber._next (switchMap.js:40)
at SwitchMapSubscriber.push../node_modules/rxjs/_esm5/internal/Subscriber.js.Subscriber.next (Subscriber.js:54)
at angularfire2.js:49
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:388)
at Object.onInvoke (core.js:3820)
at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:387)
at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:138)
Проблемная строка в моем AuthState
классе:
// fireAuth === null
switchMap(fireAuth => fireAuth ? this.authService.auth$(fireAuth.uid) : of(null)),
Но, если я удалю оператор of
ивернуть результат authService.auth$
наблюдаемый (который возвращает of(null
), тогда ошибка исчезнет: