Nodejs在发射时同步答案

时间:2014-05-14 08:38:35

标签: javascript node.js

我该怎么办?

var some=function(){
    process.EventEmitter.call(this);
    var answer=this.emit('test');
}
...
var test=some();
test.on('test'){
    return 'answer';
}

程序和模块之间的消息传递可能存在其他功能吗?

1 个答案:

答案 0 :(得分:3)

物体观察自然是不自然的

来自Felix's Node.js Style Guide。 FelixGeisendörfer是早期node.js的核心贡献者。

  

我强烈建议你永远不要从里面听自己班级的事件。   物体观察自然是不自然的。它经常导致不受欢迎的暴露   实施细节,使您的代码更难以遵循。

Node的内置EventEmitter实施,特别是其#emit method文档,说:

  

使用提供的参数按顺序执行每个侦听器。

     

如果事件有侦听器,则返回true,否则返回false

因此,如果您希望从此实现继承,则行为不可行(当然,除非您覆盖emit行为)

重新考虑你的方法

正如@vkurchatkin在评论中指出的那样,如果有多个侦听器连接到发射器,应该是什么行为?

如果你只需要一个监听器,返回一些东西,也许你应该“扩展”你的基础“ class ”并覆盖一个带有所需实现的方法,或修改所需实例上的所需函数,或其他任何函数。

恕我直言,你的方法不正确,你应该研究一下并重新考虑它。