以下是我的代碼的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