[nodeJS] EventEmitter

박종범·2021년 9월 14일
0

EventEmitter 메소드

emit(eventName [,…args])

eventName 이벤트 발생시킴
args를 콜백함수의 인자로 넘겨줌

on(eventName, listener)

eventName 이벤트에 listener 리스너 추가
( =eventName 이벤트 발생시 listener 콜백함수 실행)

sample code

const eventEmitter = new EventEmitter()
eventEmitter.on(‘connection’, (stream) => console.log(‘someone connected!))

result

someone connected!

once(eventName, listener)

eventName 이벤트에 listener 콜백함수 실행후 listener 삭제
즉, 처음 한번만 이벤트를 수행함. 다음번 이벤트의 호출에는 listener 작동X

sample code

const eventEmitter = new EventEmitter()
eventEmitter.once(‘foo’, () =>  console.log(‘a’))
eventEmitter.emit(‘foo’)
eventEmitter.emit(‘foo’)

result

a

prependListener(eventName, listener)

eventName 이벤트에 등록된 리스너큐의 제일 앞에 listener 콜백 추가

sample code

const eventEmitter = new EventEmitter()
eventEmitter.once(‘foo’, () =>  console.log(‘a’))
eventEmitter.prependListener(‘foo’, () => console.log(‘b’))
eventEmitter.emit(‘foo’)

result

b
a

prependOnceListener(eventName, listener)

eventName 이벤트에 등록된 리스너큐의 제일 앞에 listener 콜백 추가
eventName 이벤트가 한번 실행된 이후에는 해당 listener 삭제
즉, 다음 이벤트의 호출에는 동작하지 않음

sample code

const eventEmitter = new EventEmitter()
eventEmitter.once(‘foo’, () =>  console.log(‘a’))
eventEmitter.prependOnceListener(‘foo’, () => console.log(‘b’))
eventEmitter.emit(‘foo’)

result

b
a

off(eventName, listener)

removeListener 와 같은 역할 - eventName 이벤트의 listener 리스너를 삭제함

정리

sample code

const ee = new EventEmitter()
const onceListener = () => console.log(`onceListener`)
const prependOnceListener = () => console.log(`prependOnceListener`)
const onListener = () => console.log(`onListener`)
const prependListener = () => console.log(`prependListener`)
ee.once(`foo`, onceListener)
ee.prependOnceListener(`foo`, prependOnceListener)
ee.on(`foo`, onListener)
ee.prependListener(`foo`, prependListener)

Show Current Listeners

console.log(ee.listeners(`foo`))
[
  [Function: prependListener],
  [Function: prependOnceListener],
  [Function: onceListener],
  [Function: onListener]
]

여기서 EventEmitter가 listener들을 큐와 같은 자료구조에 저장하는 듯하다
on 또는 once는 큐의 제일 마지막에 Listener를 추가, prependListener 또는 prependOnceListener는 큐의 제일 앞에 Listener를 추가한다.

First foo Event

ee.emit(`foo`)
prependListener
prependOnceListener
onceListener
onListener

첫번째 ’foo’ event가 실행된 후, prependOnceListeneronceListener를 이용하여 추가된 listener들은 실행 후 삭제될 것이다.

Second foo Event

ee.emit(`foo`)
prependListener
onListener

따라서 두번째 ’foo’ event가 실행될 때는 [Function: prependOnceListener][Function: onceListener]는 실행되지 않는다.

0개의 댓글