rx-event-manager

0.5.3 • Public • Published

Build Status Coverage Status NPM version Downloads

Rx Event Manager

motivation

To allow inter-modules communication in Rx way. Also, it memorize Rx.Disposable instances where we can simply call dispose without explicitly stored returned subscription.

API

observe

return a Rx.Observable instance with given event name

observe given event

EventManager.observe('hello').
    subscribe(function (data) {
        // data.answer === 42;
    });
    
EventManager.fire('hello', { answer: 42 })

on

a shorthand of combination of observe and subscribe which returns an instance of Rx.Observer

listen to given event

EventManager.on('hello', function (data) {
    // data.answer === 42;
});
    
EventManager.fire('hello', { answer: 42 });

fire

dispatch event with given event and data

// fire 'hello' event which which has data { answer: 42 }
EventManager.fire('hello', { answer: 42 });
 
// fire 'answer' event which has data `42`
EventManager.fire('answer', 42);

once

listen to given event only once.

EventManager.once('hello',
    function (data) {
        console.log(data.value);
    },
    function (ex) {
        // nada
    }.
    function () {
        console.log('complete');
    }
);
    
EventManager.fire('hello', { value: 'hello' });
> hello
> complete
 
EventManager.fire('hello', { value: 'world' })
// nothing happened

latest

emit sequence immediately with most recent value if given event got fired before.

EventManager.fire('hello', 42);
 
EventManager.latest('hello', function onNext(value) {
    console.log('callback %s', value);
});
> callback 42
 
EventManager.latest('hello').
    subscribe(function (value) {
        console.log('observable %s', value);
    });
> observable 42
 
EventManager.fire('hello', 'world');
> callback world
> observable world

change

emit sequences only if data changed

EventManager.change('hello').
    subscribe(function (value) {
        console.log('hello %s', value);
    });
 
EventManager.fire('hello', 1);
> 1
 
EventManager.fire('hello', 1);
// nothing happened
 
EventManager.fire('hello', 2);
> 2
function comparer(x, y) {
    return x.value === y.value;
}
 
EventManager.change('hello', comparer).
    subscribe(function (data) {
        console.log('observable %s', data.value);
    });
    
EventManager.change('hello', comparer, function (data) {
    console.log('callback %s', data.value);
});
 
EventManager.fire('hello', { value: 1 });
> observable 1
> callback 1
 
EventManager.fire('hello', { value: 1 });
// nothing happened
 
EventManager.fire('hello', { value: 2 });
> observable 2
> callback 2

dispose

dispose and remove given event

// get disposable instance from `on` method
 
EventManager.on('hello', function (data) {
    console.log(data.value);
});
    
EventManager.fire('hello', { value: 'hello' });
> hello
 
EventManager.dispose('hello');
 
EventManager.fire('hello', { value: 'world' })
// nothing happened
// get disposable instance from `once` method
 
EventManager.once('hello', function (data) {
    console.log(data.value);
});
 
EventManager.dispose('hello');
 
EventManager.fire('hello', { value: 'world' })
// nothing happened
// get disposable instance from `observe` method
 
EventManager.observe('hello').subscribe(function (data) {
    console.log(data.value);
});
 
EventManager.fire('hello', { value: 'world' })
> world
 
EventManager.dispose('hello');
 
EventManager.fire('hello', { value: 'world' })
// nothing happened
// via `observe` method which has extra operators 
 
EventManager.observe('hello').
    filter(function (value) {
        return 'string' === typeof value;
    }).
    subscribe(function (data) {
        console.log(data.value);
    });
 
EventManager.fire('hello', { value: 42 })
//nothing happened
 
EventManager.fire('hello', { value: 'world' })
> world
 
EventManager.dispose('hello');
 
EventManager.fire('hello', { value: 'world' })
// nothing happened

disposeAll

dispose and remove all event subscriptions

EventManager.on('hello', function (data) {
    console.log(data.value);
});
    
EventManager.fire('hello', { value: 'hello' });
> hello
 
EventManager.disposeAll();
 
EventManager.fire('hello', { value: 'world' })
// nothing happened

Package Sidebar

Install

npm i rx-event-manager

Weekly Downloads

1

Version

0.5.3

License

ISC

Last publish

Collaborators

  • huang47