Я думаю, catchError
ожидает поток observable
, и он говорит, что я должен вернуть в случае ошибки на путь subscribe
без ошибок. Для вашего случая я бы сделал эту обработку ошибок в subscribe
.
this.userService.getUser(uid)
.subscribe(user => {
if (user) {
this.store.dispatch(new UserActions.LoggedIn());
this.router.navigate(['/']);
}
}, (error) => {
console.log(error);
this.router.navigate(['/sign-up']);
})
Rx js catchError
, требующих потока и документации: https://www.learnrxjs.io/learn-rxjs/operators/error_handling/catch
======================== Изменить ====================== ===== Я вижу, что вы хотите обработать ошибку перед подпиской, тогда да, вы должны предоставить поток для subscribe
, но условие внутри if
не будет выполняться, потому что мы вернем null
.
Попробуйте:
import { of } from 'rxjs';
....
this.userService.getUser(uid)
.pipe(
catchError(err => {
this.router.navigate(['/sign-up']);
return of(null); // return null for the subscribe below
})
)
.subscribe(user => {
if (user) {
this.store.dispatch(new UserActions.LoggedIn());
this.router.navigate(['/']);
}
})
Я думаю, что оба пути хороши.