Node.js 教程,node,Node.js,nodejs 在线

811Node.js EventEmitter

1、使用类方法 listenerCount 获取指定事件的监听数量替代方案。

eventEmitter.listeners('connection').length

2、removeListener('connection',callback); 此处参数 callback 必须和监听器中的回调函数是同一个,否则不生效。

810Node.js EventEmitter

EventEmitter 里面的 error 事件,EventEmitter 即使绑定了 error 事件,也是不会输出的。而是会在控制台打印该异常的堆栈信息,并结束进程。获取异常只能通过 try catch。

eventEmitter.on('error',function(err){
    console.error('Error:',err);
});

我测试了一下,绑定 error 事件。只能自己触发,eventEmitter.emit('error'); 当没有错误时,会在控制台打印 Error:undefined。有错误时,不会打印,直接打印该异常的堆栈信息,并结束进程。

809Node.js EventEmitter

1、eventEmitter.on()与eventEmitter.addListener()没有区别,且一个事件可以绑定多个回调函数;

2、若事件队列中出现一个未绑定事件则触发error事件,若未绑定 error事件则程序抛出异常结束执行

808Node.js 事件循环

1、eventEmitter.emit 是触发事件(事件请求),eventEmitter.on是绑定处理事件的处理器(事件处理),事件的请求和处理是分开的,所以是异步。

2、如果把下面两个例子写在一起执行:

//例子1
var fs = require("fs");
fs.readFile('text.txt',
function(err, data) {
    if (err) return console.error(err);
    console.log(data.toString());
    console.log("end");
    console.log("***********************");
});
//例子2
var events = require("events");
var eventEmitter = new events.EventEmitter();
var connectHandler = function connected() {
    console.log("connnect successfully !");
    eventEmitter.emit("after_connect");
}
eventEmitter.on("connected", connectHandler);
eventEmitter.on('after_connect',
function() {
    console.log("after connect");
});
eventEmitter.emit("connected");
console.log("event emitter end");

你会发现,例子 2 先输出,例子 1 后输出,可以验证是异步的,因为例子 1 需要进行 IO 耗时较长,但是例子 2 是直接输出信息,耗时较短,在两者几乎同时执行的情况下,例子 2 优先执行完。

807Node.js 事件循环

首先说事件

事件就是需要 eventEmitter.on 去绑定一个事件 通过 eventEmitter.emit 去触发这个事件其次说的是 事件的 接收发生 是分开的 就像 一个外卖店你可以不停的接受很多订单, 接受以后开始告诉厨师去做外卖, 做好的外卖对应的外送给每个用户,如果单线程的话那只能是接收一个订单, 做好以后在接收下一个外卖订单,明显效率非常低。

事件可以不停的接受不停的发生也是为了提高效率。