mirror of
https://github.com/ragestudio/linebridge.git
synced 2025-06-09 10:34:17 +00:00
added event_emitter
lib
This commit is contained in:
parent
218bb7e2b0
commit
75251be768
65
src/lib/event_emitter/index.js
Normal file
65
src/lib/event_emitter/index.js
Normal file
@ -0,0 +1,65 @@
|
||||
export default class EventEmitter {
|
||||
#events = {}
|
||||
|
||||
on = (eventName, listener) => {
|
||||
if (!this.#events[eventName]) {
|
||||
this.#events[eventName] = []
|
||||
}
|
||||
|
||||
this.#events[eventName].push(listener)
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
emit = (eventName, ...args) => {
|
||||
if (!this.#events[eventName]) {
|
||||
return false
|
||||
}
|
||||
|
||||
this.#events[eventName].forEach((listener) => {
|
||||
listener(...args)
|
||||
})
|
||||
}
|
||||
|
||||
off = (eventName, listener) => {
|
||||
if (!this.#events[eventName]) {
|
||||
return false
|
||||
}
|
||||
|
||||
const index = this.#events[eventName].indexOf(listener)
|
||||
|
||||
if (index > -1) {
|
||||
this.#events[eventName].splice(index, 1)
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
removeAllListeners = (eventName) => {
|
||||
if (!this.#events[eventName]) {
|
||||
return false
|
||||
}
|
||||
|
||||
this.#events[eventName] = []
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
awaitEmit = async (eventName, ...args) => {
|
||||
if (!this.#events[eventName]) {
|
||||
return false
|
||||
}
|
||||
|
||||
await Promise.all(this.#events[eventName].map(async (listener) => {
|
||||
await listener(...args)
|
||||
}))
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
hasEvent = (eventName) => {
|
||||
return !!this.#events[eventName]
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user