以下是我的代码的NodeJS事件的NodeJS处理
var emitter = require('events'),
eventEmitter = new emitter.EventEmitter();
eventEmitter.on('data', function (result) { console.log('Im From Data'); });
eventEmitter.on('error', function (result) { console.log('Im Error'); });
require('http').createServer(function (req, res) {
res.end('Response');
var start = new Date().getTime();
eventEmitter.emit('data', true);
eventEmitter.emit('error', false);
while(new Date().getTime() - start < 5000) {
//Let me sleep
}
process.nextTick(function() {
console.log('This is event loop');
});
}).listen(8090);
是的NodeJS单线程的,它在一个事件循环运行,并在同一个线程服务的事件。 因此,在上面的代码中,对我的本地主机:8090节点线程的请求应该保持忙于为请求提供服务[有5秒的睡眠时间]。
同时有两个事件由eventEmitter发出。因此,这两个事件都必须在事件回调中排队等待请求处理完成。
但是,这并没有发生,我可以看到发出的同时发生的事件。
这是预期的吗?我明白,如果它按我期望的那样工作,那么就不会使用扩展事件模块。但eventEmitter发出的事件是如何处理的?
只是猜测你正在报告什么...它似乎像eventEmitter.emit同步处理(而不是异步)。这意味着他们从来没有在事件队列中排队...... FWIW,这是我一直在java中实现所有监听器/事件模式的方式。所以这似乎是振振有词的正确行为 – ControlAltDel