upload project
This commit is contained in:
commit
06961cae04
422 changed files with 110626 additions and 0 deletions
63
utils/event-emitter.js
Normal file
63
utils/event-emitter.js
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
/**
|
||||
* 事件发射器基类
|
||||
* 提供事件订阅和发布机制
|
||||
*/
|
||||
|
||||
class EventEmitter {
|
||||
constructor() {
|
||||
this.events = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册事件监听器
|
||||
* @param {string} event - 事件名称
|
||||
* @param {Function} listener - 监听器函数
|
||||
*/
|
||||
on(event, listener) {
|
||||
if (!this.events[event]) {
|
||||
this.events[event] = [];
|
||||
}
|
||||
this.events[event].push(listener);
|
||||
}
|
||||
|
||||
/**
|
||||
* 移除事件监听器
|
||||
* @param {string} event - 事件名称
|
||||
* @param {Function} listener - 监听器函数(可选)
|
||||
*/
|
||||
off(event, listener) {
|
||||
if (!this.events[event]) return;
|
||||
|
||||
if (listener) {
|
||||
this.events[event] = this.events[event].filter(l => l !== listener);
|
||||
} else {
|
||||
delete this.events[event];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 触发事件
|
||||
* @param {string} event - 事件名称
|
||||
* @param {*} data - 事件数据
|
||||
*/
|
||||
emit(event, data) {
|
||||
if (!this.events[event]) return;
|
||||
|
||||
this.events[event].forEach(listener => {
|
||||
try {
|
||||
listener(data);
|
||||
} catch (error) {
|
||||
console.error(`事件监听器执行失败 [${event}]:`, error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空所有事件监听器
|
||||
*/
|
||||
removeAllListeners() {
|
||||
this.events = {};
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = EventEmitter;
|
||||
Loading…
Add table
Add a link
Reference in a new issue