Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 全局函数还是传递函数_Node.js_Coffeescript - Fatal编程技术网

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'))
示例所示。您必须使用回调