I created an Observable generating potentially infinite amount of data (e.g. a timer). This data is accessed through a subject, so multiple observers would receive the same values.
How to stop the Observable generating new values? (without modifying the implementation of the Observable)
// custom Observable, to visualize internal behavior
const timer$ = new rxjs.Observable(subscriber => {
console.log("observable init");
var counter = 0;
const intervalId = setInterval(() => {
++counter;
console.log("observable %s",counter);
subscriber.next(counter);
}, 1000);
return () => {
console.log("observable teardown");
clearTimeout(intervalId);
}
});
// subscribe through a subject
const subject$ = new rxjs.Subject();
timer$.subscribe(subject$);
const subscription = subject$.subscribe(value => console.log("observer %s", value));
// cancel subscription
setTimeout(() => {
console.log("unsubscribe observer");
subscription.unsubscribe();
// TODO how to stop Observable generating new values?
}, 3000);
jsfiddle: https://jsfiddle.net/gy4tfd5w/