Как я могу создать холодную тему в RxJS?
По умолчанию субъект RxJs является "жарко", но возможно ли творить "холодно" субъект, чтобы получить все значения, распространяемые от него с самого начала?
То есть:
let s = new Subject();
s.next(1);
s.next(2);
s.subscribe(n => console.log(n)); //to get here 1 2 3
s.next(3);
2 ответа:
Для этого можно использовать ReplaySubject. Единственное, что нужно иметь в виду, - это то, что ReplaySubject ожидает, что число во время создания будет знать, сколько значений оно должно буферизировать. Вы не можете буферизировать все элементы.
const subject = new Rx.ReplaySubject(10); subject.next("1"); subject.next("2"); subject.next("3"); subject.next("4"); subject.next("5"); subject.subscribe( (val) => console.log(val) ); subject.next("6"); // Logs out // 1 // 2 // 3 // 4 // 5 // 6
ReplaySubject
ведет себя именно так, как вы описываете. Смотрите ReactiveX Subject docs для получения более подробной информации.