EventEmitter可能導致重複註冊和重複觸發

2021-09-20 03:18:58 字數 1466 閱讀 3373

eventemitter在同乙個函式註冊到同乙個event name時會導致重複觸發

例如下面的** 

var events = require('events'); 

let ev1 = "ev-1";

let onev1 = (a, b)=>

var emitter = new events.eventemitter();

console.log("event on: ev-1, onev1");

emitter.on(ev1, onev1);

console.log("event on: ev-1, onev1");

emitter.on(ev1, onev1);

console.log("event send: ev-1 123, abc");

emitter.emit(ev1, 123, "abc");

輸出結果如下:  

event on: ev-1, onev1

event on: ev-1, onev1

event send: ev-1 123, abc

event coming: ev-1 123 abc

event coming: ev-1 123 abc

要麼自己避免重複的註冊, 要麼可以考慮使用zevent

zevent的實現和簡單, 因此也很穩定, 效能高.

**位置: [email protected]:gzx-miller/zevent.git

首先, 

npm install zevent
然後如下呼叫

let  = require('zevent');

let ev1 = "ev-1";

let onev1 = (a, b)=>

let event = new zevent();

console.log("event on: ev-1, onev1");

event.on(ev1, onev1);

console.log("event on: ev-1, onev1");

event.on(ev1, onev1);

console.log("event send: ev-1 123, abc");

event.send(ev1, 123, "abc");

settimeout(() => , 200);

結果如下:

event on: ev-1, onev1

event on: ev-1, onev1

event send: ev-1 123, abc

event coming: ev-1 123 abc

event off: ev-1, onev1

event send: ev-1 456, def

關於EventEmitter的用法

1 var eventemitter require events eventemitter 2 var ee new eventemitter 3 ee.on someevent function 6 7 ee.emit someevent emit方法可以觸發多個同樣的事件,比如我們的頁面中繫結...

node核心EventEmitter的應用總結

eventemitter是node中應用非常廣泛,不管是框架,還是腳手架,還是外掛程式都可以看到eventemitter的身影。比如我們去檢視vue,react,webpack,egg,koa等框架或者外掛程式的原始碼,都可以看到內部使用到了eventemitter。那麼到底什麼是eventemit...

EventEmitter的前端JS實現

on event,listener 為指定事件註冊乙個 接受乙個字串 event 和乙個 函式。emit event,arg1 arg2 按 的順序執行執行每個 addlistener event,listener on的同名函式 alias once event,listener 和on類似,但只...