node.js 中的事件驱动

235 阅读1分钟

Nodejs中不存在浏览器中冒泡,捕获这些行为,Nodejs中实现了events这个模块,Nodejs中大多数模块都集成了这个模块。
所有发出事件的对象都是events.EventEmitter的实例,可以通过require(“event”)导入。
eventEmitter.on() 方法用于注册监听器,eventEmitter.emit() 方法用于触发事件。

示例:

const EventEmitter = require('events');
let emitter = new EventEmitter();
emitter.on('myEvent', () => {
  console.log('hello');
});
emitter.on('myEvent', () => {
  console.log('world');
});
emitter.emit('myEvent'); 
// hello world
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
let m = 0;
myEmitter.on('event', () => {
  console.log(++m);
});
myEmitter.emit('event'); 
// 1 
myEmitter.emit('event'); 
// 2

使用 eventEmitter.once() 方法时可以注册一个对于特定事件最多被调用一次的监听器。 当事件被触发时,监听器会被注销,然后再调用。

const MyEmitter = require('events');
const myEmitter = new MyEmitter();
let m = 0;
myEmitter.once('event', () => {
  console.log(++m);
});
myEmitter.emit('event');
// 打印: 1
myEmitter.emit('event');
// 忽略不打印。