Подтвердить что ты не робот

В чем разница между Subject и BehaviorSubject?

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

4b9b3361

Ответ 1

A BehaviorSubject содержит одно значение. Когда он подписывается, он немедленно выдает значение. Объект не имеет значения.

Пример темы (с API RxJS 5):

const subject = new Rx.Subject();
subject.next(1);
subject.subscribe(x => console.log(x));

Консольный выход будет пустым

Пример поведения:

const subject = new Rx.BehaviorSubject();
subject.next(1);
subject.subscribe(x => console.log(x));

Выход консоли: 1

Кроме того:

  • BehaviorSubject может быть создан с начальным значением: new Rx.BehaviorSubject(1)
  • Рассмотрим ReplaySubject, если вы хотите, чтобы объект удерживал более одного значения

Ответ 2

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