once 的使用
发布于 2天前 作者 smoothwood 123 次浏览 来自 问答

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

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

回到顶部