Simple signal messaging system
npm i signalus-simplex
Package on npm
Argument | Action |
---|---|
cb | the callback |
ctx | optional context for cb , default to undefined
|
priority | optional priority, higher is invoked first, default to 0
|
Simple example
const Signal = require('signalus-simplex')
var update = new Signal()
function cb(arg) {
console.log('hello', arg)
}
update.add(cb)
// hello world
update.dispatch('world')
With context
const Signal = require('signalus-simplex')
function cb(num) {
console.log(num + this.val)
}
var ctx = { val:5 }
var update = new Signal()
update.add(cb, ctx)
// 15
update.dispatch(10)
With priority
const Signal = require('signalus-simplex')
function fun1() { console.log('a') }
function fun2() { console.log('b') }
function fun3() { console.log('c') }
var update = new Signal()
update.add(fun1)
update.add(fun2)
update.add(fun3, null, 2)
// c
// a
// b
update.dispatch()
Remove all listeners
const Signal = require('signalus-simplex')
function fun1() { console.log('a') }
function fun2() { console.log('b') }
update.add(fun1)
update.add(fun2)
// a
// b
update.dispatch()
update.clear()
update.dispatch() // do nothing
Dispatch with custom arguments
const Signal = require('signalus-simplex')
function cb(a, b) {
console.log('a:', b)
console.log('b:', b)
}
var update = new Signal()
update.add(cb)
// a: foo
// b: bar
update.dispatch('foo', 'bar')
Stop propagation by returning false
const Signal = require('signalus-simplex')
function fun1() { console.log('a'); return false }
function fun2() { console.log('b') }
update.add(fun1)
update.add(fun2)
// a
update.dispatch()
Check if cb
is already registered
Return true
if the exact same association cb
/ ctx
was found
const Signal = require('signalus-simplex')
var update = new Signal()
function cb() {
console.log('hello world')
}
// false
update.has(cb)
update.add(cb)
// true
update.has(cb)
update.remove(cb)
// false
update.has(cb)
Like add
but the callback cb
will be invoked only once
The internal reference is automatically removed after the dispatch
, using remove
is not needed
Same options than add
const Signal = require('signalus-simplex')
var update = new Signal()
function cb() {
console.log('hello')
}
update.add(cb)
// hello
update.dispatch()
update.dispatch() // do nothing
Remove the listener cb
The listener is removed only if the exact same association cb
/ ctx
was added
const Signal = require('signalus-simplex')
function fun1() { console.log('a') }
function fun2() { console.log('b') }
function fun3() { console.log('c') }
function fun4() { console.log('d') }
var ctx1 = {}
var ctx2 = {}
update.add(fun1)
update.add(fun2)
update.add(fun3, ctx1)
update.add(fun4, ctx2)
update.remove(fun1)
// not removed because fun2 is registered without context
update.remove(fun2, ctx1)
// not removed because fun3 is registered with `ctx1`
update.remove(fun3)
update.remove(fun4, ctx2)
// b
// c
update.dispatch()
Mainly forked / inspired on
MIT