9

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

帮助表示赞赏!:)

4

3 回答 3

13

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

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

于 2016-02-14T18:44:07.857 回答
0

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

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

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

于 2020-12-09T17:27:59.593 回答
-1

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

于 2019-07-31T20:48:14.617 回答