2016-02-14 20 views
2

我是Node新手,我很努力去理解事件和函數之間的主要區別。兩者都需要觸發,所以如果我們必須觸發它,爲什麼我們需要一個事件呢?NodeJS:事件和函數之間的區別?

它與觸發功能有什麼不同?

示例代碼:

var events = require('events'); 
var eventEmitter = new events.EventEmitter(); 

eventEmitter.on('event1', function() { 
    console.log('Event 1 executed.'); 
    eventEmitter.emit('event2'); 
}); 

eventEmitter.on('event2', function() { 
    console.log('Event 2 executed.'); 
}); 

eventEmitter.emit('event1'); 
console.log('Program Ended.'); 

我們可以通過函數達到同樣的效果,對不對?

我相信這在Node中有一些嚴重的重要性(否則它不存在,lol),但我很難理解它。

幫助感謝! :)

+1

函數被*調用*,就像一個方法一樣,通過傳遞參數給它:'...(...)'。這不是「觸發」。 – Bergi

+1

您如何通過功能實現「相同的結果」?並且請注意,您已經*在EventEmitter解決方案中使用函數*作爲事件處理函數。 – Bergi

回答

5

事件處理異步操作。它們與功能並沒有真正的聯繫,因爲它們是可以互換的。

eventEmitter.on本身就是一個函數,它接受事件名稱的兩個參數,然後是事件發生時要執行的函數(回調函數)。

eventEmitter.on(evt, callback)

沒有辦法知道何時該事件將被髮射,所以你提供事件發生時要執行的回調。

在您的示例中,您正在控制何時觸發事件,這與實際使用情況不同,您可能有服務器正在偵聽可隨時連接的連接。

server.listen('9000', function(){ 
    console.log('Server started'); 
}); 

server.on('connection', function(client){ 
    console.log('New client connected'); 
    doSomethingWithClient(client); 
}); 

//series of synchronous events 
function doSomethingWithClient(client){ 
    //something with client 
} 

對於server.listen服務器不會立即開始,一旦它準備調用回調

server.on('connection')偵聽客戶端連接,就可以隨時來。事件在連接發生時觸發,導致回調被執行。

然後有doSomethingWithClient這只是一個函數,當一個客戶端連接發生時要完成一組同步操作。

+0

非常有幫助。謝謝! –

相關問題