doc/api/core/observer.md
# This is RxJS v 4. [Find the latest version here](https://github.com/reactivex/rxjs)# Observer object # The Observer object provides support for push-style iteration over an observable sequence. The Observer and Objects interfaces provide a generalized mechanism for push-based notification, also known as the observer design pattern. The Observable object represents the object that sends notifications (the provider); the Observer object represents the class that receives them (the observer). <!-- div --> ## `Observer Methods`- [`create`](#rxobservercreateonnext-onerror-oncompleted)- [`fromNotifier`](#rxobserverfromotifierhandler) ## `Observer Instance Methods`- [`asObserver`](#rxobserverprototypeasobserver)- [`checked`](#rxobserverprototypechecked)- [`notifyOn`](#rxobserverprototypenotifyonscheduler)- [`onCompleted`](#rxobserverprototypeoncompleted)- [`onError`](#rxobserverprototypeonerrorerror)- [`onNext`](#rxobserverprototypeonnextvalue)- [`toNotifier`](#rxobserverprototypetonotifier) ## _Observer Methods_ ## ### <a id="rxobservercreateonnext-onerror-oncompleted"></a>`Rx.Observer.create([onNext], [onError], [onCompleted])`<a href="#rxobservercreateonnext-onerror-oncompleted">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1828-L1833 "View in source") [Ⓣ][1] Creates an observer from the specified `onNext`, `onError`, and `onCompleted` actions. #### Arguments1. `[onNext]` *(Function)*: Observer's onNext action implementation.2. `[onError]` *(Function)*: Observer's onError action implementation.3. `[onCompleted]` *(Function)*: Observer's onCompleted action implementation. #### Returns*(Observer)*: The observer object implemented using the given actions. #### Example```jsvar source = Rx.Observable.return(42); var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); var subscription = source.subscribe(observer); // => Next: 42// => Completed``` ### Location - rx.js * * * ### <a id="rxobserverfromotifierhandler"></a>`Rx.Observer.fromNotifier(handler, [thisArg])`<a href="#rxobserverfromotifierhandler">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1843-L1851 "View in source") [Ⓣ][1] Creates an observer from a notification callback. #### Arguments1. `handler` *(Function)*: Function that handles a notification.2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing `handler`. #### Returns*(Observer)*: The observer object that invokes the specified handler using a notification corresponding to each message it receives. #### Example```jsfunction handler(n) { // Handle next calls if (n.kind === 'N') { console.log('Next: ' + n.value); } // Handle error calls if (n.kind === 'E') { console.log('Error: ' + n.exception); } // Handle completed if (n.kind === 'C') { console.log('Completed') }} Rx.Observer.fromNotifier(handler).onNext(42);// => Next: 42 Rx.Observer.fromNotifier(handler).onError(new Error('error!!!'));// => Error: Error: error!!! Rx.Observer.fromNotifier(handler).onCompleted();// => false``` ### Location - rx.js * * * ## _Observer Instance Methods_ ## ### <a id="rxobserverprototypeasobserver"></a>`Rx.Observer.prototype.asObserver()`<a href="#rxobserverprototypeasobserver">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1810-L1812 "View in source") [Ⓣ][1] Hides the identity of an observer. #### Returns*(Observer)*: An observer that hides the identity of the specified observer. #### Example```jsfunction SampleObserver () { Rx.Observer.call(this); this.isStopped = false;} SampleObserver.prototype = Object.create(Rx.Observer.prototype);SampleObserver.prototype.constructor = SampleObserver; Object.defineProperties(SampleObserver.prototype, { onNext: { value: function (x) { if (!this.isStopped) { console.log('Next: ' + x); } } }, onError: { value: function (err) { if (!this.isStopped) { this.isStopped = true; console.log('Error: ' + err); } } }, onCompleted: { value: function () { if (!this.isStopped) { this.isStopped = true; console.log('Completed'); } } }}); var sampleObserver = new SampleObserver(); var source = sampleObserver.asObserver(); console.log(source === sampleObserver);// => false``` ### Location - rx.js * * * ### <a id="rxobserverprototypechecked"></a>`Rx.Observer.prototype.checked()`<a href="#rxobserverprototypechecked">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1819 "View in source") [Ⓣ][1] Checks access to the observer for grammar violations. This includes checking for multiple `onError` or `onCompleted` calls, as well as reentrancy in any of the observer methods. If a violation is detected, an Error is thrown from the offending observer method call. #### Returns*(Observer)*: An observer that checks callbacks invocations against the observer grammar and, if the checks pass, forwards those to the specified observer. #### Example```jsvar observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); var checked = observer.checked(); checked.onNext(42);// => Next: 42 checked.onCompleted();// => Completed // Throws Error('Observer completed')checked.onNext(42);``` ### Location - rx.js * * * ### <a id="rxobserverprototypenotifyonscheduler"></a>`Rx.Observer.prototype.notifyOn(scheduler)`<a href="#rxobserverprototypenotifyonscheduler">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1858-1860 "View in source") [Ⓣ][1] Schedules the invocation of observer methods on the given scheduler. #### Arguments1. `scheduler` *(Scheduler)*: Scheduler to schedule observer messages on. #### Returns*(Observer)*: Observer whose messages are scheduled on the given scheduler. #### Example```jsvar observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // Notify on timeout schedulervar timeoutObserver = observer.notifyOn(Rx.Scheduler.timeout); timeoutObserver.onNext(42);// => Next: 42``` ### Location - rx.js * * * ### <a id="rxobserverprototypeoncompleted"></a>`Rx.Observer.prototype.onCompleted()`<a href="#rxobserverprototypeoncompleted">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1899-L1904 "View in source") [Ⓣ][1] Notifies the observer of the end of the sequence. #### Example```jsvar observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); observer.onCompleted();// => Completed``` ### Location - rx.js * * * ### <a id="rxobserverprototypeonerrorerror"></a>`Rx.Observer.prototype.onError(error)`<a href="#rxobserverprototypeonerrorerror">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1889-L1894 "View in source") [Ⓣ][1] Notifies the observer that an exception has occurred. #### Arguments1. `error` *(Any)*: The error that has occurred. #### Example```jsvar observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); observer.onError(new Error('error!!'));// => Error: Error: error!!``` ### Location - rx.js * * * ### <a id="rxobserverprototypeonnextvalue"></a>`Rx.Observer.prototype.onNext(value)`<a href="#rxobserverprototypeonnextvalue">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1881-L1883 "View in source") [Ⓣ][1] Notifies the observer of a new element in the sequence. #### Arguments1. `value` *(Any)*: Next element in the sequence. #### Example```jsvar observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); observer.onNext(42);// => Next: 42``` ### Location - rx.js * * * ### <a id="rxobserverprototypetonotifier"></a>`Rx.Observer.prototype.toNotifier()`<a href="#rxobserverprototypetonotifier">#</a> [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1801-L1804 "View in source") [Ⓣ][1] Creates a notification callback from an observer. #### Returns*(Function)*: The function that forwards its input notification to the underlying observer. #### Example```jsvar observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); var notifier = observer.toNotifier(); // Invoke with onNextnotifier(Rx.Notification.createOnNext(42));// => Next: 42 // Invoke with onCompletednotifier(Rx.Notification.createOnCompleted());// => Completed``` ### Location - rx.js * * *