【问题标题】:Difference between Events and Functions?事件和函数的区别?
【发布时间】:2016-05-25 12:50:52
【问题描述】:

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

帮助表示赞赏! :)

【问题讨论】:

  • 一个函数被调用,就像一个方法,通过传递参数给它:…(…)。它不是“触发”的。
  • 如何通过函数实现“相同的结果”?请注意,您已经在EventEmitter 解决方案中使用函数作为事件处理程序。

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


【解决方案1】:

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

因此,例如,您可以在游戏中拥有大量对象,它们都在等待增加其动画的 step 事件。

虽然我宁愿只使用函数,但调试它们是如此痛苦。

【讨论】:

  • 我只能同时调用多功能,这不是事件的特权。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    事件处理异步操作。从可以互换的意义上说,它们与函数并没有真正的关系。

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

    【讨论】:

    • 非常有帮助。谢谢!
    • 我也在努力理解这一点。好的,对于代码中的示例:server.on('connection', function(client){ console.log('New client connected'); doSomethingWithClient(client); }); 但是要执行此代码,有些需要调用event.emit('connection', client)对吗?调用函数有什么区别:function connection(client){...}
    猜你喜欢
    • 1970-01-01
    • 2011-04-18
    • 2010-12-19
    • 2019-10-21
    • 2015-05-16
    • 2011-11-19
    • 1970-01-01
    相关资源
    最近更新 更多