Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nodejs学习 -- events模块 #2

Open
mt51 opened this issue Oct 17, 2018 · 0 comments
Open

nodejs学习 -- events模块 #2

mt51 opened this issue Oct 17, 2018 · 0 comments

Comments

@mt51
Copy link
Owner

mt51 commented Oct 17, 2018

node.js events模块

nodejs 大多数的核心API依赖异步的事件驱动,events 模块提供了触发器和监听器,通过触发命名事件来调用监听器。

这些能够触发事件的API都是EventEmitter类的实例。

EventEmitter 类

EventEmitter 类提供的方法有很多,但是常用的只有几个。

方法
  • on(eventName, listener) : 添加 listener函数到名为eventName的事件监听器数组的末尾,不会检查listener是否已被添加,传入同名的eventNamelistener 会导致listener添加多次。

    返回值是当前事件实例

const EventEmitter = require('events')
const emitter = new EventEmitter()
emitter.on('event', () => {
    console.log('event')
})

emitter.emit('event')
  • emit(eventName [,args]): 按照监听器注册的顺序,同步的调用每个注册到名为eventName的事件的监听器,并传入提供的参数,如果事件有监听器返回true,否则返回false

  • addListener: on(eventName, listener) 的别名

  • removeListener(eventName, listener): 从名为eventName的监听器数组中移除指定的listener,返回值是当前事件实例

    注意:

    1. 该方法每次最多移除一个listener
    2. 一旦事件被触发,所有绑定在该事件的监听器会被依次调用。也就是说在事件触发之后、并且最后一个监听器完成之前,removeListenerremoveAllListener不会从监听器数中移除listener
    const EventEmitter = require('events')
    const emitter = new EventEmitter()
    const callbackA = () => {
        console.log('A')
        emitter.removeListener('event', callbackB)
    }
    const callbackB = () => {
        console.log('B')
    }
    emitter.on('event', callbackA)
    emitter.on('event', callbackB)
    emitter.emit('event')
  • off(eventName, listener): removeListener(eventName, Listener)的别名

  • removeAllListener(eventName): 移除全部监听器或指定的 eventName 事件的监听器。返回值是当前事件实例。

  • once(eventName, listener): 添加单次监听器 listener 到名为 eventName 的事件。 当 eventName 事件下次触发时,监听器会先被移除,然后再调用。

  • eventNames():返回已注册监听器的事件名数组。

    const EventEmitter = require('events')
    const emitter = new EventEmitter()
    emitter.on('event', () => {})
    emitter.on('foo', () => {})
    console.log(emitter.eventNames())
    // ['event', 'foo']
常用事件
  • removeListener : 'removeListener' 事件在 listener 被移除后触发
  • newListener:newListener事件在添加新的监听器时触发。在newListener 回调中注册的同名事件的监听器会被注册在改事件的监听器数组的前面。

其他的不常用的一些方法可以查看官方文档

参考

nodejs文档

@mt51 mt51 changed the title nodejs学习---events模块 nodejs学习 -- events模块 Oct 18, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant