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