fn-eventify attach EventEmitter interface to Function.
npm install fn-eventify
The first, You should initialize fn-eventify
like a creating an instace of EventEmitter.
import * as Eventify from 'fn-eventify'
const Eventor = Eventify.create();
Eventor has eventify()
, subscribe()
and subscribeAll()
const fn = () => 'hello world';
const greet = Eventor.eventify('GREET', fn);
Callback function can return Promise
.
Eventor.eventify('ASYNC_SOMETHING', () => Promise.resolve());
const unsubscribe = greet.subscribe((event) => {...});
unsubscribe();
const unsubscribe = Eventor.subscribe('GREET', (event) => {...})
unsubscribe();
You can listen all event.
const unsubscribe = Eventor.subscribeAll((event) => {...})
unsubscribe();
To publish, You just call eventified function simply.
const message = greet() // return result and pubslish event
assert.equal(message, 'hello world')
{
name: string; // event name
payload: any; // something that returned by function
}
You can use inject((event: EventifyEvent) => EventifyEvent | {[prop: string]: any})
.
const greet = Eventor.eventify('GREET', (message) => `${message}`)
.inject((event) => Object.assign(event, { greetor: 'cotto' })) // inject by callback
or
const greet = Eventor.eventify('GREET', (message) => `${message}`)
.inject({ greetor: 'cotto' }) // inject by Object
then
greet.subscribe((event) => {
assert.deepEqual(event, {
name: 'GREET',
payload: 'hello world',
greetor: 'cotto' // injected extra props
})
})
greet('hello world'); //-> hello world