concept subscription in category rxjs

This is an excerpt from Manning's book RxJS in Action.
Every piece of data that’s emitted and processed through an observable needs a destination. In other words, what was the purpose of capturing and processing a certain event? Observers are created within the context of a subscription, which means that the result of calling subscribe() on an observable source is a Subscription object. Because observables operate synchronously or asynchronously, the consumer of an observable must in some way support the inversion of control that also happens with callbacks. This is consistent with its push-based mechanism. That is, because you don’t know when a DOM element, for instance, will fire an event or when the result of an AJAX call will return, observables must be able to call into or signal the observer structure that more data is available by using the observer’s next() method, as illustrated in figure 2.13. This mechanism is directly inspired in the iterator and observer patterns. An iterator doesn’t know (or care) about the size of the data structure it’s looping over or if it will ever end; it only knows whether there’s more data to process.
This is why we need sophisticated libraries like RxJS. In RxJS, the producer is the one responsible for unsubscribing. Managing a subscription is handled through an object of type Subscription (also known as a Disposable in RxJS 4) returned from a call to subscribe(), which implements the mechanism to dispose of the source stream. If we’ve finished with the observable and no longer wish to receive events from it, we can call unsubscribe() to tear it down; this is known as explicit cancellation. Here’s a short example: