Я собираюсь опубликовать то, что я сделал здесь, на случай, если это поможет кому-то еще.Вместо этого я возвращаю один экземпляр BehaviorSubject
и просто добавляю в него новые значения всякий раз, когда мне нужно «принудительно» получить текущего пользователя.Я также добавил флаг fetchingCurrentUser
, чтобы не выполнять несколько вызовов, пока я ожидаю завершения первого вызова API.
Пожалуйста, дайте мне знать, если кто-нибудь видит какие-либо проблемы с этим илиесть какие-либо идеи о том, как сделать его чище .Спасибо.
@Injectable()
export class UserService {
private currentUser$: BehaviorSubject<User>;
private fetchingCurrentUser: boolean;
constructor(private http: HttpClient) {
this.currentUser$ = new BehaviorSubject(null);
}
getCurrentUser(force = false): Observable<User> {
if (this.currentUser$.value == null || force) {
this.refreshCurrentUser();
}
return this.currentUser$.asObservable();
}
refreshCurrentUser() {
if (!this.fetchingCurrentUser) {
this.fetchingCurrentUser = true;
this.http.get<User>(`${environment.API_URL}/profiles/me`)
.subscribe(x => {
this.currentUser$.next(x);
this.fetchingCurrentUser = false;
});
}
}