尝试将某些内容传递给其他内容。说未定义。不确定如何或为何。
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
只是null或undefined
答案 0 :(得分:1)
很难理解你在问什么,但我会做一些观察:
在代码中
clsapp.on 'mysqld', ->
getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result)
你可能意味着将回调参数称为result
,而不是c
。除非你在其他地方定义result
。
更重要的是, 是您编写此代码的更清晰的方式。只是将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'))
示例所示。你必须使用回调。