Node.js 全局函数还是传递函数
试着把东西传给别的东西。表示未定义。不知道如何或为什么Node.js 全局函数还是传递函数,node.js,coffeescript,Node.js,Coffeescript,试着把东西传给别的东西。表示未定义。不知道如何或为什么 clsapp.on 'mysqld', -> getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result) 在.js的另一部分中,我需要一些方法来访问getHostById('localhost').hostname clsapp.on getHostById('localhost'), (c) -> c
clsapp.on 'mysqld', ->
getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result)
在.js的另一部分中,我需要一些方法来访问getHostById('localhost').hostname
clsapp.on getHostById('localhost'), (c) ->
console.log JSON.parse(getHostById('localhost')).hostname
只是空的或未定义的很难理解你在问什么,但我会做一些观察: 在代码中
clsapp.on 'mysqld', ->
getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result)
您可能希望调用回调参数result
,而不是c
。除非您在别处定义结果
更重要的是,必须有一种更清晰的方法来编写此代码。只需将getHostById
的定义扩展为多行就有点帮助:
clsapp.on 'mysqld', ->
getHostById = (host) ->
cls.getHostById.acq host, (result) -> JSON.stringify(result)
现在,我认为最终的问题是,您试图使异步函数同步运行,而这在JavaScript(或CoffeeScript,JS之上的一个很薄的语法层)中是无法做到的。由于
cls.getHostById.acq
接受回调,因此它几乎可以肯定地设计为在回调返回后调用该回调,这样它就不会阻塞线程。这意味着您无法编写一个只返回值的getHostById
函数,正如您的JSON.parse(getHostById('localhost'))
示例所示。你必须使用回调。很难理解你在问什么,但我会做一些观察:
在代码中
clsapp.on 'mysqld', ->
getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result)
您可能希望调用回调参数result
,而不是c
。除非您在别处定义结果
更重要的是,必须有一种更清晰的方法来编写此代码。只需将getHostById
的定义扩展为多行就有点帮助:
clsapp.on 'mysqld', ->
getHostById = (host) ->
cls.getHostById.acq host, (result) -> JSON.stringify(result)
现在,我认为最终的问题是,您试图使异步函数同步运行,而这在JavaScript(或CoffeeScript,JS之上的一个很薄的语法层)中是无法做到的。由于cls.getHostById.acq
接受回调,因此它几乎可以肯定地设计为在回调返回后调用该回调,这样它就不会阻塞线程。这意味着您无法编写一个只返回值的getHostById
函数,正如您的JSON.parse(getHostById('localhost'))
示例所示。您必须使用回调