В чем разница между субъектом и поведением субъекта?
Я не совсем понимаю разницу между субъектом и объектом BehaviorSubject. Это просто, что BehaviorSubject имеет функцию getValue?
2 ответа:
объект BehaviorSubject содержит одно значение. Когда он подписан, он немедленно выдает значение. Субъект не имеет значения.
пример темы (с RxJS 5 API):
const subject = new Rx.Subject(); subject.next(1); subject.subscribe(x => console.log(x));
вывод консоли будет пуст
BehaviorSubject пример:
const subject = new Rx.BehaviorSubject(); subject.next(1); subject.subscribe(x => console.log(x));
консольный выход: 1
кроме того:
- BehaviorSubject может быть создан с начальным значением: new Rx.BehaviorSubject (1)
- рассмотреть ReplaySubject, если вы хотите, чтобы объект содержал более одного значения
BehaviourSubject
BehaviourSubject вернет начальное значение или текущее значение по подписке
var subject = new Rx.BehaviorSubject(0); // 0 is the initial value subject.subscribe({ next: (v) => console.log('observerA: ' + v) // output initial value, then new values on `next` triggers }); subject.next(1); // output new value 1 for 'observer A' subject.next(2); // output new value 2 for 'observer A', current value 2 for 'Observer B' on subscription subject.subscribe({ next: (v) => console.log('observerB: ' + v) // output current value 2, then new values on `next` triggers }); subject.next(3);
С выход:
observerA: 0 observerA: 1 observerA: 2 observerB: 2 observerA: 3 observerB: 3
теме
Subject не возвращает текущее значение по подписке. Он срабатывает только на
.next(value)
вызов и возврат/выводvalue
var subject = new Rx.Subject(); subject.next(1); //Subjects will not output this value subject.subscribe({ next: (v) => console.log('observerA: ' + v) }); subject.subscribe({ next: (v) => console.log('observerB: ' + v) }); subject.next(2); subject.next(3);
со следующим выводом на консоль:
observerA: 2 observerB: 2 observerA: 3 observerB: 3