A powerful and flexible event management system that supports asynchronous operations and multiple Promise strategies.
- 🔄 Asynchronous Event Handling
- 🎯 Multiple Promise Strategies (allSettled/all/race/any/no)
- 📝 Built-in Event Recorder
- 🌐 Support for Node.js and Browser
- 🎨 Flexible Event Control
npm install emitx
# or
yarn add emitx
import { emitx } from 'emitx'
const eventManager = emitx()
// Register event
eventManager.on('userLogin', (data) => {
console.log('User logged in:', data)
})
// Emit event
eventManager.emit('userLogin', { username: 'johndoe' })
// Normal listener
eventManager.on('eventName', callback)
// One-time listener
eventManager.once('eventName', callback)
// Listen to all events
eventManager.all((data) => {
console.log(`Event "${data.eventName}" triggered`)
})
// Emit specific event
eventManager.emit('eventName', data)
// Emit all events
eventManager.emit('*', data)
// or
eventManager.emit('all', data)
EmitX supports various Promise handling strategies:
const eventManager = emitx()
eventManager.emit('asyncEvent', data).then(results => {
console.log('All promises settled:', results)
})
const eventManager = emitx({ promiseStrategy: 'all' })
const eventManager = emitx({ promiseStrategy: 'race' })
const eventManager = emitx({ promiseStrategy: 'any' })
import { createRecorder } from 'emitx'
const recorder = createRecorder({
maxRecord: 100,
isRecord: true,
changeRecord: (type, eventName, callback) => {
console.log(type, eventName, callback)
}
})
const eventManager = emitx({ recorder })
import { isOnce } from 'emitx'
isOnce(callback) // Returns true if the function is registered as a once listener
// Check if event is registered
eventManager.isOn(callback)
// Get all events
eventManager.getEvents()
// Get all callbacks
eventManager.getAllCallback()
// Remove events
eventManager.off() // Clear all
eventManager.off('eventName') // Clear specific event
eventManager.off('eventName', fn) // Remove specific callback
// Handle async login process
eventManager.on('login', async (credentials) => {
const user = await authService.login(credentials)
return user
})
// Multiple async operations
eventManager.on('login', async (credentials) => {
await logService.record(credentials)
})
// Trigger login event
eventManager.emit('login', { username, password })
.then(results => console.log('Login process completed:', results))
// Module A
eventManager.on('dataChanged', (newData) => {
// Update UI
})
// Module B
eventManager.emit('dataChanged', { value: 'new value' })
Issues and Pull Requests are welcome!
MIT