Node.js-发出vs函数调用

邓码

我一直在Node中使用EventEmitters,并且遇到某些情况,在这些情况下我无法决定是否将值发送回“ EventEmitter对象”并让其侦听它们,或者只是调用一个函数来设置值。

我创建了一个简单的示例来解释我的观点。

myTimer函数仅每秒发出任何喜欢的数字。可以通过changenumber函数调用或在changenumber事件更改其值

var util = require("util");
var events = require("events");
var favNo = 2;

var myTimer = function() {
    var self = this;
    events.EventEmitter.call(this);

    setInterval(function() {
        self.emit('favourite number', favNo);
    }, 1000);

    // on changenumber event, change number
    this.on('changenumber', function (newNo) {
        favNo = newNo;
    });
}

util.inherits(myTimer, events.EventEmitter);

// on function call, change number
myTimer.prototype.changenumber = function(newNo) {
    favNo = newNo;
}
module.exports = myTimer;

下面的代码使用myTimer函数并侦听其“收藏夹号”事件。可以通过函数调用或通过在myTimer对象上发出“更改编号”来设置收藏夹编号。

var myTimer = require('./myTimer.js');
var timer = new myTimer();

timer.on("favourite number", function(number) {
    console.log(number);
});

timer.changenumber(102); // change number using function.
timer.emit('changenumber', 102); // change number by emitting number

两种方法似乎都行得通,但是,如果复杂度增加,使用emit发送回值似乎就很难遵循。我在项目中一直使用socket.io,并且看到它基本上在客户端和服务器端都发出并监听相同的对象,所以也许这使我感到困惑。

在任何情况下,使用一种方法可能比另一种方法更合适吗?

布拉德

几个注意事项可能会消除一些困惑:

  • 事件是指事情发生的时间。(例如error发生了,data可用)

  • 在几乎所有情况下,都应从对象本身发出事件。调用对象之外的东西没有意义.emit().emit()仅从内部呼叫

在您的函数示例中changenumber,您肯定应该在这里使用一个函数。呼叫时timer.changenumber(),您正在告诉计时器更改其号码。呼叫时timer.emit('changenumber'),实际上是代表计时器在说数字已经更改。更糟糕的是,计时器正在自言自语。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从Node.js中的构造函数发出/捕获事件?

来自分类Dev

Node.js中的函数调用执行

来自分类Dev

node.js 中的基本函数调用

来自分类Dev

Node js,函数执行

来自分类Dev

关于node.js将数据返回给Ajax调用函数

来自分类Dev

Node.js猫鼬静态函数未调用

来自分类Dev

正确的过程以在Node.js中调用多个异步函数

来自分类Dev

在node.js中调用一个函数

来自分类Dev

从node.js中的一个文件调用函数

来自分类Dev

从Node.js中的字符串调用函数

来自分类Dev

如何使用monk / node.js调用mongodb函数?

来自分类Dev

在Node.js回调中调用模块函数

来自分类Dev

Node.js:在函数调用中包装整个脚本

来自分类Dev

在Node JS中完成for循环时调用函数

来自分类Dev

node.js请求处理程序不会调用函数

来自分类Dev

在html文件中调用node.js函数

来自分类Dev

Firebase:如何调用https.onCall函数node.js?

来自分类Dev

Node.js-如何通过回调调用异步函数?

来自分类Dev

从Angular应用程序调用Node.js中的函数

来自分类Dev

Node.js猫鼬静态函数未调用

来自分类Dev

正确的过程以在node.js中调用多个异步函数

来自分类Dev

使用Node.js在不同的JavaScript文件中调用函数

来自分类Dev

Node.js中的Promise.all不调用then函数

来自分类Dev

在html文件中调用node.js函数

来自分类Dev

使用 Function 对象 node.js 调用函数

来自分类Dev

Node.js - 以太坊合约无法调用函数

来自分类Dev

通过事件发出来调用JS函数

来自分类Dev

RxJS分组发出的事件Node.js

来自分类Dev

无法在 node.js 中发出请求