2012-02-22 35 views
2

から値を返す方法IのCoffeeScriptで以下の機能を持っている:@ client.methodCallはXMLRPCライブラリを参照非同期呼び出し

newEdge: (fromVertexID, toVertexID) -> 
    edgeID = this.NOID 
    @client.methodCall('ubigraph.new_edge', [fromVertexID, toVertexID], (error, value) -> 
     if(error) 
      console.log('ubigraph.new_edge error: ' + error) 
     edgeID = value 
    ) 
    edgeID 

。 私の質問は、edgeIDとして値を返す方法です。コールバックを使用していますか?

もしそうなら、コールバックは次のようになりますか?

# callback is passed the following parameters: 
# 1. error - an error, if one occurs 
# 2. edgeID - the value of the returned edge id 
newEdge: (fromVertexID, toVertexID, callback) -> 
    @client.methodCall('ubigraph.new_edge', [fromVertexID, toVertexID], (error, value) -> 
     if(error) 
      console.log('ubigraph.new_edge error: ' + error) 
     edgeID = value 
     callback(error, value) 
    ) 

答えて

3

はい、コールバックは時々あなたがコールバックを呼び出すコールバックを呼び出すコールバックを持って、すべての方法ダウンのコールバック、非同期呼び出しのための通常のソリューションです。私はおそらくかかわらず、少し違った、それを行うだろう:

newEdge: (fromVertexID, toVertexID, on_success = ->, on_error = ->) -> 
    @client.methodCall('ubigraph.new_edge', [fromVertexID, toVertexID], (error, edge_id) -> 
     if(error) 
      console.log('ubigraph.new_edge error: ' + error) 
      on_error(error) 
     else 
      on_success(edge_id) 
    ) 

主な違いは、発信者が個別にこれらの条件を扱うことができるように鉱山が別々の成功とエラーコールバックを持っていることである、さまざまな条件のために別々のコールバックがとても一般的なアプローチでありますそれはほとんどの人によく知られているはずです。コールバックがオプションであるように、デフォルトのno-opコールバックも追加しましたが、メインのメソッド本体は、常に提供されているふりをすることができます。

あなたは、あなたがコールバックのために「という名前の」引数を使用することができ、次の4つの引数を使用して好きではない場合:

newEdge: (fromVertexID, toVertexID, callbacks = { }) -> 
    @client.methodCall('ubigraph.new_edge', [fromVertexID, toVertexID], (error, edge_id) -> 
     if(error) 
      console.log('ubigraph.new_edge error: ' + error) 
      callbacks.error?(error) 
     else 
      callbacks.success?(edge_id) 
    ) 

オブジェクトを使用するには、/コールバックのハッシュを使用すると、空命令の代わりにexistential operatorを使用することができますコールバックをオプションにします。単一のコールバックは、Node.jsの中にいつものパターンがある


Aaron Dufourノートはので、あなたの独創的なアプローチは、Node.jsのためのより良いフィット感を次のようになります。

newEdge: (fromVertexID, toVertexID, callback = ->) -> 
    @client.methodCall('ubigraph.new_edge', [fromVertexID, toVertexID], (error, edge_id) -> 
     if(error) 
      console.log('ubigraph.new_edge error: ' + error) 
     callback(error, edge_id) 
    ) 
+0

でも1つのコールバック、のユーザーと関数はそれぞれの場合に何をすべきかを決めることができますが、基本的にはあなたの答えです:コールバックがそれを行う方法です。私が探していたものでした。ありがとう – lowerkey

+0

@lowerkey:十分にはっきりしているが、別々のコールバックが普通のアプローチだと思われる。 jQueryは、少なくとも成功とエラーのために別々のコールバックを使用するため、ほとんどの人にはよく知られています。私はこれを明確にする(試した)。 –

+1

ほとんどのnode.jsライブラリはエラーを最初のパラメータとして持つ単一のコールバックを使用しています。これにより、すべてのユーザーがすべてシームレスに対話できます。私は別のコールバックを介してその方法をお勧めします。 –

関連する問題