меня есть сервис аутентификации, в котором есть Subjects isLoading, success, failure, и я подписываюсь на них в разных компонентах. Стоит ли мне избавиться от них и подписываться только на ответ от сервера в компонентах?
Что именно?
вообще подписка в сервисе это типа эффект, которое связывает событие и действие. Это допустимо, если мы точно знаем временную область действия инжектора, когда подписка нужна и когда умрет. Но в вашем примере такая подписка в сервисе точно не нужна. И в компоненте тоже
А если внутри сервиса вызвать метод map и внутри этого метода вызывать next у Subjects, а потом вернуть Observable и подписаться на него в компонентах, то так будет нормально?
Хочется управлять состоянием централизованно, а не размазывать логику по компонентам.
управляйте централизованно. Но то что вы выше написали как будто совсем про другое
почитайте для чего map вообще используется) ну и возвращайте поток, можете через какой нибудь shareReplay сделать
у тебя флаг isLoading, сигнализирующий о создании запроса, устанавливается когда метод вызывался, хотя по факту когда метод вызывался вернется просто обзервабл, а запрос создастся только когда на этот обзервабл кто то подпишется
А если tap юзать вместо map?
https://t.me/angular_ru/703004
вот мой логаут public logout(reason: string = '') { // remove all tokens in strages this._passport$.next(new Anon()); return this.router.navigate([URL_LOGIN]); } вот логин: public login(email: string, password: string): Observable<Passport> { return this.http.post<InputToken>(API_LOGIN_URL, {email: email, password: password}) .pipe( take(1), tap((input) => this.saveToken(input)), switchMap(() => this.passport$) ); } зачем вы нагородили столько кода для логаута? 🙂
У меня рефреш токен хранится на серваке
Обсуждают сегодня