What is the difference between Subject and BehaviorSubject?

后端 未结 5 952
小蘑菇
小蘑菇 2020-11-22 04:53

I\'m not clear on the difference between a Subject and a BehaviorSubject. Is it just that a BehaviorSubject has the getValue()

5条回答
  •  自闭症患者
    2020-11-22 05:01

    BehaviourSubject

    BehaviourSubject will return the initial value or the current value on Subscription

    var bSubject= new Rx.BehaviorSubject(0);  // 0 is the initial value
    
    bSubject.subscribe({
      next: (v) => console.log('observerA: ' + v)  // output initial value, then new values on `next` triggers
    });
    
    bSubject.next(1);  // output new value 1 for 'observer A'
    bSubject.next(2);  // output new value 2 for 'observer A', current value 2 for 'Observer B' on subscription
    
    bSubject.subscribe({
      next: (v) => console.log('observerB: ' + v)  // output current value 2, then new values on `next` triggers
    });
    
    bSubject.next(3);
    

    With output:

    observerA: 0
    observerA: 1
    observerA: 2
    observerB: 2
    observerA: 3
    observerB: 3
    

    Subject

    Subject does not return the current value on Subscription. It triggers only on .next(value) call and return/output the 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);
    

    With the following output on the console:

    observerA: 2
    observerB: 2
    observerA: 3
    observerB: 3
    

提交回复
热议问题