试图将某些东西传递给其他东西。说不确定。不知道如何或为什么。

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(或Cof​​feeScript,这是JS之上的薄语法层)中是无法实现的。由于cls.getHostById.acq接受回调,因此几乎可以肯定地设计了它在返回后调用该回调,从而不会阻塞线程。这意味着您无法编写getHostById函数,就像您的JSON.parse(getHostById('localhost'))示例所建议的那样,该函数仅返回一个值。您必须使用回调。

08-07 06:55