CNode

once 的使用

问答
Ssmoothwood发布于11 年前最后回复11 年前3 回复3638 浏览0 收藏

今天发现一个情况,无法解释,请大家帮忙看看如下代码。

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)

S
smoothwood#1·11 年前

谢谢,确实是res.end之后又请求了一次favicon

J
jysperm#2·11 年前

浏览器会请求 favicon? 所以有两个请求?

J
jx-zhou#3·11 年前

看一下请求url就知道了,直接看服务器哪里应该可以找到,或者在代码里调试打印一下看看url是什么

参与回复
登录后即可参与回复。登录