feat: once
This commit is contained in:
parent
500ada03ff
commit
9262e7b1a8
|
@ -2,19 +2,22 @@ import fastCall from './fast-call.js';
|
|||
|
||||
export default class EventEmitter {
|
||||
$$listeners = {};
|
||||
addListener(type, listener) {
|
||||
addListener(type, listener, options = {}) {
|
||||
if (!this.$$listeners[type]) {
|
||||
this.$$listeners[type] = new Set();
|
||||
this.$$listeners[type] = new Map();
|
||||
}
|
||||
this.$$listeners[type].add(listener);
|
||||
this.$$listeners[type].set(listener, options);
|
||||
}
|
||||
invoke(type, ...args) {
|
||||
const listeners = this.$$listeners[type];
|
||||
if (!listeners) {
|
||||
return;
|
||||
}
|
||||
for (const listener of listeners) {
|
||||
for (const [listener, options] of listeners) {
|
||||
fastCall(listener, undefined, args);
|
||||
if (options.once) {
|
||||
listeners.delete(listener);
|
||||
}
|
||||
}
|
||||
}
|
||||
removeListener(type, listener) {
|
||||
|
|
Loading…
Reference in New Issue
Block a user