Читал-пробовал. В конкетно этой ситуации BehaviorSubject подходит, но проблема оказалась шире. Дело в том, что при получении значения вызывается complete и BehaviorSubject не срабатывает (можно использовать ReplaySubject или AsyncSubject, но проблема не в этом). Собственно встала задача превратить завершенный observable в незавершенный. Чтобы это примерно так работало:
const currentUser$ = users.getCurrent() //get user 1
currentUser$.subscribe(user => console.log(user)) // user 1, user2
setTimeout(() => {
users.getCurrent() //get user 2
}, 1000)
setTimeout(() => {
currentUser$.subscribe(user => console.log(user)) //user 2
}, 2000)
Пока на ум только самые топорные решения приходят в духе:
class Users {
observer;
observable$ = new Observable(observer => {
this.observer = observer;
});
getCurrent() {
getCurrentUser().subscribe(this.observer.next);
return this.observable$;
}
}
const users = new Users()
Можно как-нибудь изящнее это сделать?