1.1.0 • Published 4 years ago

@lexriver/type-event v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

TypeEvent

Typed event class for typescript

Install

npm install @lexriver/type-event

Import

import {TypeEvent} from '@lexriver/type-event'

Usage

// creating new event
const e = new TypeEvent<(a:number, b:number)=>void>()

let sum = 0

// subscribing to event
e.subscribe((a,b) => {
    console.log('event is triggered!', 'a=', a, 'b=', b)
    sum = a + b
})

// triggering event
await e.triggerAsync(100,200)

console.log(sum) // 300

Unsubscibe from event

There are two ways to unsubscribe from event.

First way is to return special object {unsubscribe:true}

const e = new TypeEvent()
e.subscribe(() => {
    if(someCondition()){
        return {unsubscribe: true}
    }
})

Second way is to use .unsubscribe(handler) method on event

const e = new TypeEvent<()=>void>()
let counter = 0
const eventHandler = () => {
    console.log('event is triggered')
    counter++
}
e.subscribe(eventHandler)
e.triggerAsync()

e.unsubscribe(eventHandler)
e.triggerAsync()

console.log(counter) // 1

Subscribe once

const e = new TypeEvent()
let counter = 0
e.once(() => {
    counter++
})
e.triggerAsync()
e.triggerAsync()
console.log(counter) // 1

Count of subscribers

Use .countOfSubscribers and .countOfOnceSubscribers properties to get some stats for the event.

const e = new TypeEvent()
e.once(() => {

})
e.once(() => {

})
e.subscribe(() => {

})

console.log(e.countOfSubscribers) // 1
console.log(e.countOfOnceSubscribers) // 2

Unsubscribe all

Unsubscribe all handlers from event

const e = new TypeEvent()
e.subscribe(() => 0)
e.subscribe(() => 1)
e.once(() => 2)
e.unsubscribeAll()
e.countOfSubscribers // 0
e.countofOnceSubscribers // 0