2017-02-10 11 views
1

Я знаю, что мне нужно использовать startWith, но все еще пытаюсь понять, как его использовать. Если я просто делаю Subject.create().startWith("Some Value), он превращает Subject в Observable, и я не могу использовать next для испускания.RXJS Subject, возвращайте то же самое значение при каждом первом подписании

Таким образом, несколько подписчиков должны иметь возможность subscribe. Должна иметь возможность позвонить next по телефону Subject. Просматривая документы Subject.create(), но это идет медленно.

Редактировать: Я получил его для работы после использования принятого решения. Причина, по которой он не работал раньше, состоял в том, что я положил вызов .next внутри подписки.

Например:

observable.subscribe((res) => { 
// do something 
s.next('another res'); 
} 

Это создает бесконечный цикл, и я думаю, что RXJS помешало? Во всяком случае, я поставил next там для целей отладки. Я переместил его за пределы этого блока subscribe, и теперь и исходный результат испускается, затем, когда вызывается next, все, что было внутри subscribe, испускает снова.

ответ

1

Вам следует избегать использования Subject.create() и использовать только Subject(). См: Subject vs AnonymousSubject

Просто держать ссылку на Subject экземпляр и другую ссылку к наблюдаемой цепи вам нужно:

let s = new Subject(); 
let observable = s.startWith("Some initial message"); 

observable.subscribe(...); 
s.next('whatever'); 
+0

Я попытался сделать это, но наблюдаемый не излучает, когда я называю 'next' на 's' –

+0

Спасибо, Мартин, я думаю, что RXJS заблокировал мой глупый бесконечный цикл, когда я поставил' next' внутри подписки для целей отладки. Переместил его стороной, и теперь начальный и следующий пробиваются. –