once 的使用
今天发现一个情况,无法解释,请大家帮忙看看如下代码。
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()造成事件侦听又被注册了一次,同时也又被执行了一次,想不通为何,请各位指教
3 回复
浏览器会请求 favicon? 所以有两个请求?
看一下请求url就知道了,直接看服务器哪里应该可以找到,或者在代码里调试打印一下看看url是什么
谢谢,确实是res.end之后又请求了一次favicon