2012-03-20 7 views
1

何かに何かを渡そうとしています。定義されていないと言います。方法や理由がわからないグローバル関数または関数を渡す

clsapp.on 'mysqld', -> 
    getHostById = (host) -> cls.getHostById.acq host, (c) -> JSON.stringify(result) 

の.jsの別の部分の内側に

clsapp.on getHostById('localhost'), (c) -> 
  console.log JSON.parse(getHostById('localhost')).hostname 

は、それはあなたが求めているかを理解するのは難しい

答えて

1

だけnullまたは未定義のですが、私ながら、私はgetHostById('localhost').hostnameにアクセスするためのいくつかの方法が必要ですコード

:「いくつかの観測を行うでしょう

コールバック引数がresultで、cではないと考えられます。他の場所でresultを定義している場合を除きます。

さらに重要なことは、にはがあり、このコードを記述するための明確な方法です。ただ、複数行であることをgetHostByIdの定義を支援拡大ビット:今

clsapp.on 'mysqld', -> 
    getHostById = (host) -> 
    cls.getHostById.acq host, (result) -> JSON.stringify(result) 

、私は最終的に、あなたの問題はあなたが非同期機能が同期-どのあなたがすることはできません動作させるためにしようとしているということだと思いJavaScript(またはJSの上のシンタックスレイヤーであるCoffeeScript)で行います。 cls.getHostById.acqはコールバックを取るので、を返した後にそのコールバックを呼び出すように設計されているため、スレッドをブロックしません。つまり、JSON.parse(getHostById('localhost'))の例のように、単に値を返すgetHostById関数を書く方法はありません。コールバックを使用する必要があります。

関連する問題