2017-04-04 17 views
1

私は質問するのが好きではありませんが、私はどのように、またはこれを行うより良い方法を知る必要があると感じています。私は最初に私はJavaを以前にやっていたことが新しく、コールバックにも新しいことを言うべきです。私は他のいくつかの質問を読んだが、まだいくつかの困難を抱えている。これは本当に恐ろしいです。 rounds.jsでコールバック、エクスポート、およびjavacript

私はこれを持ってindex.jsでこの

exports.getCurrentRound = function(callback) { 

     exec(header + token + address, function (error, stdout, stderr) { 
      sys.print('stdout: ' + stdout); 
      rounds = stdout; 

      if (error !== null) 
       callback(null, err); 
      else 
       callback(null, currentRound); 
    }); 
} 

を持っています。

var result; 

    rounds.getCurrentRound(function (err, cr) { 

     currentRound = cr; 
     console.log("the current round is" + currentRound); 

    }); 

どうすれば結果が同等になるのですか?希望は意味をなさない。私は窓を走っていることに気をつけてください。そして、約束を使うことには消極的です。それが何であれ。私はあなたの時間を無駄にしていないことを願っています。

ありがとうございました。

これを同期して実行する方法がある場合は、それが何であるか教えてください。私はちょうどこれを行う適切な方法を知りたい。

+0

正しい方法は、コールバック内の結果を参照することです。 – Alnitak

答えて

0

あなたはほぼそこにいます!結果を一番上に定義しましたが、設定するだけです。

var result; // default: undefined 
rounds.getCurrentRound(function (err, cr) { 
    currentRound = cr; 
    console.log("the current round is" + currentRound); 
    result = currentRound; 
}); 
// result will be set at some point in the future 

問題は結果が設定されたときに、あなたがを知らないということです。あなたはsetTimeoutを使って設定されているかどうかを常に確認することによって見つけることができますが、でもは非同期です!

答えは、プログラム全体を非同期に扱う必要があることです。結果を必要とする人はコールバックを渡す必要があります。

約束は、「この変数の値をに設定するときは、いつでもに設定します。

しかし、それでも結果の値を使用するには、まだコールバックを渡す必要があることに注意してください。それはまだ非同期です!しかし、得られる利点は、結果の約束をコードに渡すことができ、コードの他のビットは、値が設定されたら何かを実行するために解決された約束を使用することができるということです。あなたは(あなたの質問に)あなたが最初に始めたコールバックメソッドを使用している場合たとえば、

result.then(function(resultValue){ 
    console.log('My code is using result ' + resultValue); 
}); 

// somewhere else 
result.then(function(resultValue){ 
    console.log('This other code is also using result ' + resultValue); 
}); 

...あなたはあなたのコード内の2つの場所で、結果の値を使用したいとしましょう両方の場合は、コールバック内の結果の値を使用する必要があります。しかし約束を使って、私たちはそれらを分けて管理しました。

簡単に言えば、答えは、コードを少し違った考え方で考えるのではなく、一連の手順として考えることです。シーケンスで起こる可能性のある一連のイベントとして考えてみましょう'完了したらいつでも' - 非同期に。

+0

本当にあなたの答えに感謝します。私は約束をしようとすると思います。しかし、あなたが結果を必要とする人は、コールバックで渡さなければならないと言うとき。例を挙げていただけますか? –

+0

私は例を追加しました:) – meltuhamy

関連する問題