1 全部能觸發事件的對象都是 EventEmitter
類的實例。 這些對象開放了一個 eventEmitter.on()
函數,容許將一個或多個函數綁定到會被對象觸發的命名事件上。 事件名稱一般是駝峯式的字符串,但也可使用任何有效的 JavaScript 屬性名。函數
當 EventEmitter
對象觸發一個事件時,全部綁定在該事件上的函數都被同步地調用。ui
註釋:綁定的多個函數會以隊列的形式被調用,因爲是同步的因此spa
const EventEmitter = require('events'); let emitter = new EventEmitter(); emitter.on('myEvent', () => { for(let i = 0; i < 5000; i ++) { console.log('ev1', i) } }); emitter.on('myEvent', () => { console.log('hi 2'); }); emitter.emit('myEvent'); /*
輸出結果
ev1 0
ev1 1
...
ev1 4999
hi 2
asdaaa
*/
const EventEmitter = require('events'); let emitter = new EventEmitter(); emitter.on('myEvent', () => { console.log('hi'); emitter.emit('myEvent'); }); emitter.emit('myEvent'); /* 會產生死循環 Maximum call stack size exceeded 回調棧溢出 調用堆棧的溢出(大小超過最大) */
const EventEmitter = require('events'); let emitter = new EventEmitter(); emitter.on('myEvent', function sth () { emitter.on('myEvent', sth); console.log('hi'); }); emitter.emit('myEvent');/*監聽器綁定會以2n的速度綁定,沒幾下就炸了*/