emitx
TypeScript icon, indicating that this package has built-in type declarations

2.0.5 • Public • Published

EmitX

English | 简体中文

A powerful and flexible event management system that supports asynchronous operations and multiple Promise strategies.

✨ Features

  • 🔄 Asynchronous Event Handling
  • 🎯 Multiple Promise Strategies (allSettled/all/race/any/no)
  • 📝 Built-in Event Recorder
  • 🌐 Support for Node.js and Browser
  • 🎨 Flexible Event Control

📦 Installation

npm install emitx
# or
yarn add emitx

🚀 Quick Start

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' })

📖 API Documentation

Basic Event Operations

Event Listening

// 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`)
})

Event Emission

// Emit specific event
eventManager.emit('eventName', data)

// Emit all events
eventManager.emit('*', data)
// or
eventManager.emit('all', data)

Promise Strategies

EmitX supports various Promise handling strategies:

allSettled (Default)

const eventManager = emitx()
eventManager.emit('asyncEvent', data).then(results => {
  console.log('All promises settled:', results)
})

all

const eventManager = emitx({ promiseStrategy: 'all' })

race

const eventManager = emitx({ promiseStrategy: 'race' })

any

const eventManager = emitx({ promiseStrategy: 'any' })

Event Recorder

import { createRecorder } from 'emitx'

const recorder = createRecorder({
  maxRecord: 100,
  isRecord: true,
  changeRecord: (type, eventName, callback) => {
    console.log(type, eventName, callback)
  }
})

const eventManager = emitx({ recorder })

Check if Function is Registered as Once

import { isOnce } from 'emitx'
isOnce(callback) // Returns true if the function is registered as a once listener

Utility Methods

// 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

💡 Use Cases

Async Event Handling

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

Inter-module Communication

// Module A
eventManager.on('dataChanged', (newData) => {
  // Update UI
})

// Module B
eventManager.emit('dataChanged', { value: 'new value' })

🤝 Contributing

Issues and Pull Requests are welcome!

📄 License

MIT

Readme

Keywords

Package Sidebar

Install

npm i emitx

Weekly Downloads

3

Version

2.0.5

License

MIT

Unpacked Size

19.9 kB

Total Files

10

Last publish

Collaborators

  • jiecheng