/**
*事件和回调处理程序
*异步是基于事件的,不是顺序走的
*回调-》事件-》异步-》非阻塞
*/
//标准事件
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
//定义事件
myEmitter.on('event', () => {
console.log('an event occurred!');
});
//触发事件
myEmitter.emit('event');
//事件传参
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
//添加参数
myEmitter.on('event', function(a, b) {
console.log(a, b, this);
// Prints:
// a b MyEmitter {
// domain: null,
// _events: { event: [Function] },
// _eventsCount: 1,
// _maxListeners: undefined }
});
myEmitter.emit('event', 'a', 'b');
//异步事件
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
//异步的执行
myEmitter.on('event', (a, b) => {
setImmediate(() => {
console.log('this happens asynchronously');
});
});
myEmitter.emit('event', 'a', 'b');
//事件只允许触发一次
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
var m = 0;
//只触发一次
myEmitter.once('event', () => {
console.log(++m);
});
myEmitter.emit('event');
// Prints: 1
myEmitter.emit('event');
// Ignored
//标准错误事件
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
//myEmitter.emit('error', new Error('whoops!'));
// 抛出错误
//此处抛出的错误被捕获
/*process.on('uncaughtException', (err) => {
console.log('whoops! there was an error');
});
myEmitter.emit('error', new Error('whoops!'));
//为了最佳实践,最好定义事件处理程序*/
myEmitter.on('error', (err) => {
console.log('whoops! there was an error');
});
myEmitter.emit('error', new Error('whoops!'));
// Prints: whoops! there was an error
//标准newListener监听事件的注册
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
// Only do this once so we don't loop forever
//event事件名,listener监听函数
//同样的还有removeListener
myEmitter.once('newListener', (event, listener) => {
if (event === 'event') {
// Insert a new listener in front
myEmitter.on('event', () => {
console.log('B');
});
}
});
myEmitter.on('event', () => {
console.log('A');
});
myEmitter.emit('event');
// Prints:
// B
// A
//设置最大监听数,默认是10
const EventEmitter = require('events');
const util = require('util');
//通过继承实现
function MyEmitter() {
EventEmitter.call(this);
}
util.inherits(MyEmitter, EventEmitter);
const myEmitter = new MyEmitter();
emitter.setMaxListeners(emitter.getMaxListeners() + 1);
emitter.once('event', () => {
// do stuff
emitter.setMaxListeners(Math.max(emitter.getMaxListeners() - 1, 0));
});
emitter.addListener(event, listener)//另一种用法emitter.on(event, listener).
emitter.getMaxListeners()
EventEmitter.defaultMaxListeners.
emitter.removeAllListeners([event])//删除listener
emitter.removeListener(event, listener)//删除具体的listener