2016-02-14 6 views
2

Я новичок в узле, и я изо всех сил стараюсь понять основное различие между событиями и функциями. Оба должны быть инициированы, поэтому зачем нам вообще нужно Событие, если мы все равно должны вызвать его?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.'); 

Мы можем достичь того же результата с помощью функций, не так ли?

Я уверен, что это имеет очень важное значение в узле (иначе оно не существовало бы, 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

Очень полезно. Спасибо! –