以下是我的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 是单线程的,它在事件循环中运行,并且同一个线程为事件提供服务。因此,在上面对我的 localhost:8090 节点的请求的代码中,节点线程应该一直忙于为请求提供服务[有 5 秒的睡眠]。
同时有两个事件被 eventEmitter 发出。因此,一旦请求得到处理,这两个事件都必须在事件循环中排队等待处理。
但这并没有发生,我可以看到事件在发出时被同步服务。
这是预期的吗?我知道如果它按我的预期工作,那么扩展事件模块就没有用了。但是 eventEmitter 发出的事件是如何处理的呢?