Показать сообщение отдельно
  #7 (permalink)  
Старый 08.12.2017, 23:06
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Читал-пробовал. В конкетно этой ситуации 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()

Можно как-нибудь изящнее это сделать?

Последний раз редактировалось Shitbox2, 08.12.2017 в 23:13.
Ответить с цитированием