Does Subject.complete() unsubscribe all listeners?
Solution 1:
If you want to be sure it removes all Observers you can check it for yourself in https://github.com/ReactiveX/rxjs/blob/master/src/internal/Subject.ts#L91. It calls complete()
on all Observers (Observers are typically just dumb objects implementing Observer interface) and then sets this.observers.length = 0;
. So the answer is yes.
Your approach is valid, it's basically the same as Angular2 regularly does with EventEmitter
. Just one thing you can improve is start using asObservable()
when exposing Subject
s. This will hide the fact that you're using a Subject
underneath and return just a regular Observable. This way you don't let your users to by accident (or from misunderstanding) try to call next()
, complete()
or error()
on your Subject
.
Regarding memory leakage, this has to be handled by RxJS, so you shouldn't worry about it and if there's a problem the authors would probably notice it before you.
Also have a look at this: Observable vs Subject and asObservable