全局或传递函数

时间:2012-03-20 22:09:43

标签: 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) ->   
  console.log JSON.parse(getHostById('localhost')).hostname

只是null或undefined

1 个答案:

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