NodeJS:事件和函数之间的区别?

时间:2016-02-14 18:17:39

标签: javascript node.js javascript-events event-handling iojs

我是Node的新手,我正在努力理解事件和函数之间的主要区别。两者都需要被触发,所以如果我们不得不触发它,为什么我们需要一个事件?

与触发功能有什么不同?

示例代码:

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中有一些非常重要的意义(否则它不会存在,哈哈),但我很难理解它。

帮助表示感谢! :)

3 个答案:

答案 0 :(得分:6)

事件处理异步操作。在它们可以互换的意义上,它们与功能并不真正相关。

eventEmitter.on本身就是一个函数,它接受事件名称的两个参数,然后是事件发生时要执行的函数(回调)。

eventEmitter.on(evt, callback)

没有办法告诉WHEN事件将被发出,所以你提供了一个在事件发生时执行的回调。

在您的示例中,您控制事件何时被触发,这与实际使用情况不同,您可以让服务器监听可以随时连接的连接。

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这只是一个函数,在客户端连接发生时要完成一组同步操作。

答案 1 :(得分:0)

我想我看到的最大区别是,事件发射器可以触发正在监听的多个事件,而仅调用一个函数只会触发一件事。

例如,您可能在游戏中有许多物体,它们都在等待逐步增加其动画的步进事件。

尽管我宁愿只使用函数,也很难调试。

答案 2 :(得分:-1)

事件是在工具(.on().emit()等)中用于设置和执行回调的标识符。函数是可重用的代码。