В чем разница между субъектом и поведением субъекта?


Я не совсем понимаю разницу между субъектом и объектом BehaviorSubject. Это просто, что BehaviorSubject имеет функцию getValue?

2 89

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