Javascript寄存器回调

Javascript寄存器回调,javascript,Javascript,我有一个服务,并想做以下工作 var service = new Service(); service.onEvent(cb); var my_module = { logged_in(){}, logged_out(){} } function cb(data){ if (data){ my_module.logged_in(data); } else { my_module.logged_out(); } } module.exports = my_mod

我有一个服务,并想做以下工作

var service = new Service();
service.onEvent(cb);
var my_module = {
  logged_in(){},
  logged_out(){}
}
function cb(data){
  if (data){
    my_module.logged_in(data);
  } else {
    my_module.logged_out();
  }
}
module.exports = my_module;
然后在其他地方使用此模块:

import my_module from 'somefile';
my_module.logged_in = function(data){
  _this.setState({user: data});
}
my_module.logged_out = function(data){
  _this.setState({user: null});
}

然而,这不起作用。函数cb抱怨my_模块没有定义。

JS在这里发现了您。变量声明和函数语句被“提升”到当前范围的最开始。这意味着,当服务事件提前触发时,可能未定义变量
my_module

见:


在这种情况下,我能做些什么来达到期望的结果?@Dave:在您引用的代码中指定
my_模块之前,不可能调用
cb
。因此,没有必要寻求解决方案,因为这不是问题所在。虽然我建议您在导出之前将调用移动到
onEvent
以保持整洁(如果出现问题,这将解决此问题),但在您引用的代码中这并不重要。我看不出上面没有定义
my_module
的任何原因。(
\u这个
不是由
我的模块
定义的。)如果我把它翻译成NodeJS并运行它,它就会工作(除了
\u这个
问题)。也许您已经简化了发布的代码,问题已经解决了?“我还希望能够在登录时将我的_模块回调到多个位置。”这是一个完全不同的问题。我已经把它删除了,作为一个问题,所以必须是一个问题,而不是两个。