2012-03-20 75 views
1

试图将某些东西传递给别的东西。说未定义。不知道如何或为什么。全局或传递函数

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

回答

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中执行(或Cof​​feeScript,它是JS之上的一个简单的语法层)。由于cls.getHostById.acq需要回叫,因此它几乎肯定会在返回后调用该回叫,以便它不会阻塞该线程。这意味着你无法编写一个简单地返回一个值的函数getHostById,正如你的JSON.parse(getHostById('localhost'))示例所示。你将不得不使用回调。