全局或传递函数

试图把东西传递给别的东西。 说undefined。 不知道如何或为什么。

clsapp.on 'mysqld', -> getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result) 

我需要一些方法来访问getHostById('localhost').hostname而另一部分的.js

 clsapp.on getHostById('localhost'), (c) -> console.log JSON.parse(getHostById('localhost')).hostname 

只是null或undefined

很难理解你在问什么,但我会做一些观察:

在代码中

 clsapp.on 'mysqld', -> getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result) 

你可能意味着被称为result的callback参数,而不是c 。 除非你在其他地方定义result

更重要的是, 必须有一个更清晰的方式来编写这段代码。 只是将getHostById的定义扩展为多行帮助一下:

 clsapp.on 'mysqld', -> getHostById = (host) -> cls.getHostById.acq host, (result) -> JSON.stringify(result) 

现在,我认为最终,你的问题是你试图让一个asynchronous函数同步行为 – 这是你在JavaScript中不能做的(或者CoffeeScript,它是JS之上的一个简单的语法层)。 由于cls.getHostById.acq需要callback,因此它几乎可以肯定地被devise为在callback之后调用该callback以便它不会阻塞该线程。 这意味着你没有办法编写一个getHostById函数来简单地返回一个值,就像你的JSON.parse(getHostById('localhost'))示例所示。 你将不得不使用callback。