I was reading through the RxJS docs and want to make sure I\'m understanding the difference between Subscriber.unsubscribe()
and Subscriber.complete()
Subscribers don't call complete()
. You can call complete()
on a Subject or more typically it's called for you "indirectly" using operators such as take()
, takeWhile()
, ...
For example:
const s = new Subject();
const subscriber1 = s.subscribe(...);
const subscriber2 = s.subscribe(...);
s.complete(); // both subscribers will receive the complete notification
// or with `take(1)` operator it'll call `complete()` for you
const subscriber1 = s.take(1).subscribe(...);
const subscriber2 = s.take(1).subscribe(...);
s.next(42); // both subscribers will receive the complete notification
Note that calling complete()
on a Subject changes its inner state and there's no way to make it non-complete again while just unsubscribing a subscriber has no effect on the Subject.
A little similar question: Observable Finally on Subscribe
From my experience with the API, the idea is that: you don't call the Observable
, the Observable
calls you. You are able to trigger things if you create a Subject
and next
/complete
the Subject though.
That's why you will see some examples that have a "private" Subject
as a class member, but the publicly exposed item is an Observable
. The expectation is that you will subscribe to the Observable
and the top level class will dispatch values through the Subject
with next()
and error()
. The only way to complete the Observable/Subject is to complete()
the Subject
.
Additionally, Subscriber does not have an unsubscribe()
method, a Subscription does.