node学习笔记——node.js事件触发器

events(事件触发器)

事件触发器events的使用方法:

大多数 Node.js 核心 API 构建于惯用的异步事件驱动架构,其中某些类型的对象(又称触发器,Emitter)会触发命名事件来调用函数(又称监听器,Listener)。
所有能触发事件的对象都是 EventEmitter 类的实例。 这些对象有一个 eventEmitter.on() 函数,用于将一个或多个函数绑定到命名事件上。 事件的命名通常是驼峰式的字符串,但也可以使用任何有效的 JavaScript 属性键。
当 EventEmitter 对象触发一个事件时,所有绑定在该事件上的函数都会被同步地调用。 被调用的监听器返回的任何值都将会被忽略并丢弃。
1.emitter.on(eventName, listener)
用来注册监听器。

2.emitter.emit(eventName[, …args])
用来触发事件:

例如:
一个简单的 EventEmitter 实例,绑定了一个监听器。 eventEmitter.on() 用于注册监听器, eventEmitter.emit() 用于触发事件。

const EventEmitter = require('events');

//MyEmitter 继承 EventEmitter
class MyEmitter extends EventEmitter{};

//创建一个实例
let myEmitter = new MyEmitter();

//通过这个实例来调用里面的方法on()来注册监听器
myEmitter.on('hi',(a,b) => {
    console.log('触发了事件',a+b);
})
//通过 emit() 来触发事件
myEmitter.emit('hi',1,2);

运行结果:

3.emitter.once(eventName, listener)
绑定的事件只能触发一次:

例如:

const EventEmitter = require('events');

//MyEmitter 继承 EventEmitter
class MyEmitter extends EventEmitter{};

//创建一个实例
let myEmitter = new MyEmitter();
myEmitter.once('hello',() => {
    console.log('触发了hello事件');
})

myEmitter.emit('hello')
myEmitter.emit('hello')

输出结果:

4.emitter.removeListener(eventName, listener)
从名为 eventName 的事件的监听器数组中移除指定的 listener。

例如:

const EventEmitter = require('events');

//MyEmitter 继承 EventEmitter
class MyEmitter extends EventEmitter{};

//创建一个实例
let myEmitter = new MyEmitter();

function fn1(a,b){
    console.log('触发了事件,带参',a+b);
}
function fn2(){
    console.log('触发了事件,不带参');
}
//通过这个实例来调用里面的方法on()来注册监听器
myEmitter.on('hi',fn1)
myEmitter.on('hi',fn2)
myEmitter.emit('hi',1,2);

console.log('移除了fn1之后:')
myEmitter.removeListener('hi',fn1);
myEmitter.emit('hi');

输出结果:

5.emitter.removeAllListeners([eventName])
移除全部监听器或指定的 eventName 事件的监听器。

用法:

const EventEmitter = require('events');

//MyEmitter 继承 EventEmitter
class MyEmitter extends EventEmitter{};

//创建一个实例
let myEmitter = new MyEmitter();

function fn1(a,b){
    console.log('触发了事件,带参',a+b);
}
function fn2(){
    console.log('触发了事件,不带参');
}
//通过这个实例来调用里面的方法on()来注册监听器
myEmitter.on('hi',fn1)
myEmitter.on('hi',fn2)
myEmitter.emit('hi',1,2);
myEmitter.removeAllListeners('hi');
myEmitter.emit('hi');

猜你喜欢

转载自blog.csdn.net/xt_123456/article/details/106843554
今日推荐