в моем UserService
У меня есть объект Observable
пользователя, который содержит UserModel
пользователя, вошедшего в систему. Для тестирования я реализовал в ngOnInit()
процесс входа в систему:
this.userService.authenticate('###', '###')
.subscribe(res => console.log('authenticated'));
private userSource = new BehaviorSubject<UserModel>(null);
public user = this.userSource.asObservable();
My UserModel предоставляет атрибут authKey, который используется для аутентификации API.
В моем ProjectService
я хотел бы сделать запрос API; Для этого необходим ключ API, сохраненный в UserModel
. Можно было бы просто подписать атрибут пользователя, но я читал о том, как избегать подписок внутри сервисов.
Вопрос
Как я могу связать эту подписку с каналами / отображением? Мой подход был следующий код; но это похоже на плохой код.
suggest(term: string): Observable<ProjectModel[]> {
return this.userSrv.user.pipe(
mergeMap((user: UserModel) => {
const options = {params: {'access-token': user.accessToken}};
return this.http.get<ProjectModel[]>(this.conf.url, options).pipe(
map(response => {
// mapping the projects ...
return projects;
})
);
})
);
}