Skip to content
This repository has been archived by the owner on Apr 20, 2018. It is now read-only.

Latest commit

 

History

History
383 lines (285 loc) · 9.5 KB

observer.md

File metadata and controls

383 lines (285 loc) · 9.5 KB

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).

Observer Methods

Observer Instance Methods

Observer Methods

Rx.Observer.create([onNext], [onError], [onCompleted])

# [Ⓣ][1]

Creates an observer from the specified onNext, onError, and onCompleted actions.

Arguments

  1. [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

var 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

Rx.Observer.fromNotifier(handler, [thisArg])

# [Ⓣ][1]

Creates an observer from a notification callback.

Arguments

  1. 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

function 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

Rx.Observer.prototype.asObserver()

# [Ⓣ][1]

Hides the identity of an observer.

Returns

(Observer): An observer that hides the identity of the specified observer.

Example

function 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

Rx.Observer.prototype.checked()

# [Ⓣ][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

var 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

Rx.Observer.prototype.notifyOn(scheduler)

# [Ⓣ][1]

Schedules the invocation of observer methods on the given scheduler.

Arguments

  1. scheduler (Scheduler): Scheduler to schedule observer messages on.

Returns

(Observer): Observer whose messages are scheduled on the given scheduler.

Example

var observer = Rx.Observer.create(
    function (x) {
        console.log('Next: ' + x)
    },
    function (err) {
        console.log('Error: ' + err);
    },
    function () {
        console.log('Completed');
    }
);

// Notify on timeout scheduler
var timeoutObserver = observer.notifyOn(Rx.Scheduler.timeout);

timeoutObserver.onNext(42);
// => Next: 42

Location

  • rx.js

Rx.Observer.prototype.onCompleted()

# [Ⓣ][1]

Notifies the observer of the end of the sequence.

Example

var 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

Rx.Observer.prototype.onError(error)

# [Ⓣ][1]

Notifies the observer that an exception has occurred.

Arguments

  1. error (Any): The error that has occurred.

Example

var 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

Rx.Observer.prototype.onNext(value)

# [Ⓣ][1]

Notifies the observer of a new element in the sequence.

Arguments

  1. value (Any): Next element in the sequence.

Example

var 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

Rx.Observer.prototype.toNotifier()

# [Ⓣ][1]

Creates a notification callback from an observer.

Returns

(Function): The function that forwards its input notification to the underlying observer.

Example

var 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 onNext
notifier(Rx.Notification.createOnNext(42));
// => Next: 42

// Invoke with onCompleted
notifier(Rx.Notification.createOnCompleted());
// => Completed

Location

  • rx.js