今天发现一个情况,无法解释,请大家帮忙看看如下代码。
var EventEmitter=require('events').EventEmitter;
var http=require('http');
var emitter=new EventEmitter();
var i=0;
var server=http.createServer(function(req,res){
emitter.once('finished',function(){
console.log(++i);
res.end();
});
process.nextTick(function(){
console.log('emitted....');
emitter.emit('finished');
});
}).listen(8888);
按照预期,当用 http://localhost:8888打开这个页面的时候,输出结果应该是: emitted… 1 可是真正的输出结果是: emitted… 1 emitted… 2
如果注释掉res.end();这一句,输出结果变为: emitted… 1 感觉res.end()造成事件侦听又被注册了一次,同时也又被执行了一次,想不通为何,请各位指教