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