signalus-simplex

0.1.1 • Public • Published

signalus-simplex

Simple signal messaging system

Install

npm i signalus-simplex

Package on npm

API

add(cb, [ctx], [priority])

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

clear()

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([arg], [arg], [...])

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

has(cb, [ctx])

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)

once(cb, [ctx], [priority])

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(cb, [ctx])

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

Thanks

Mainly forked / inspired on

License

MIT

Package Sidebar

Install

npm i signalus-simplex

Weekly Downloads

1

Version

0.1.1

License

MIT

Last publish

Collaborators

  • jeromedecoster