【问题标题】:globals or passing functions全局变量或传递函数
【发布时间】:2012-03-21 07:02:09
【问题描述】:

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

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 或未定义

【问题讨论】:

    标签: node.js coffeescript


    【解决方案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')) 示例所暗示的那样。您必须使用回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多