node.js中的事件处理机制详解

2020-06-17 07:03:39易采站长站整理

控制台输出

另外,在默认情况下,针对同一个指定事件,最多可以绑定10个时间处理函数。可以通过setMaxListeners方法修改最多可以绑定的事件处理函数数量,方法如下:


emitter.setMaxListeners(n)

EventEmitter类的once方法

EventEmiiter类的once方法与on方法类似,作用均为对指定事件绑定事件处理函数,区别在于,当事件处理函数执行一次后立即被接触,即该事件处理函数只会被执行一次。once方法所用参数与on方法所用参数相同,如下:


emitter.once(event, listener)

做个试验。

还是执行如下代码(同上):


var http = require("http");
var server = http.createServer();

server.on('request', function(req, res){
console.log('接收到客户端请求')
})

server.on("request", function(req, res){
console.log('处理客户端请求')
console.log(req.url);
res.end();
})

server.on('request', function(req, res){
console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

然后,在浏览器窗口中连续打开两次127.0.0.1:1337,控制台输出如下:


显示了两次

然后将on事件修改为once事件,代码如下:


var http = require("http");
var server = http.createServer();

server.once('request', function(req, res){
console.log('接收到客户端请求')
})

server.on("request", function(req, res){
console.log('处理客户端请求')
console.log(req.url);
res.end();
})

server.once('request', function(req, res){
console.log('发送响应完毕')
})

server.listen(1337, "127.0.0.1");

控制台输出如下:


请求处理2次,其余只打印1次!

使用removeListener方法取消事件处理函数

代码如下:


var http = require("http");
var server = http.createServer();
var testFunction = function (req,res) {
console.log('发送响应完毕')
}

server.on('request', function(req, res){
console.log('接收到客户端请求')
})

server.on("request", function(req, res){
console.log('处理客户端请求')
console.log(req.url);
res.end();
})

server.on('request', testFunction)
//删除
server.removeListener('request', testFunction)
server.listen(1337, "127.0.0.1");