RxJS-Subject

299 阅读1分钟
//RxJS v6
import { interval } from 'rxjs';
import { take } from 'rxjs/operators'

const source = interval(1000).pipe(take(3))

var observableA = {
    next: value => console.log(`A next: ${value}`),
    error: error => console.log(`A error: ${error}`),
    complete: () => console.log('A complete!')
}

var observableB = {
    next: value => console.log(`B next: ${value}`),
    error: error => console.log(`B error: ${error}`),
    complete: () => console.log('B complete!')
}

var subject = {
    observers: [],
    subscribe: function(observer) {
      this.observers.push(observer)
    },
    next: function(value){
      this.observers.forEach(item => item.next(value))
    },
    error: function(error) {
      this.observers.forEach(item => item.error(error))
    },
    complete: function(){
      this.observers.forEach(item => item.complete())
    }
}

subject.subscribe(observableA)
source.subscribe(subject)
setTimeout(() => {
    subject.subscribe(observableB)
}, 1000)

stackblitz