试图将某些东西传递给其他东西。说不确定。不知道如何或为什么。
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或未定义
最佳答案
很难理解您的要求,但是我会做一些观察:
在代码中
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'))
示例所建议的那样,该函数仅返回一个值。您必须使用回调。