2017-04-04 3 views
0

まず、while()ループまたはdo-while()ループを使用したいと思っていますが、非同期の "子プロセス "コールバックstdoutする必要がある関数です。とにかくスクリプトを実行しているとき、私の関数はコマンドプロンプトでconsole.log()を表示していません。また、最後に.kill()関数を追加してもexecが複数のプロセスを作成しているようです!node.js:コールバックが期待通りに機能しない

私の問題スコープに基づいていると信じていますが、どこが間違っているのかを特定できません。だから2つの質問、なぜそれが可能ですwhileループを使用することはできませんが、正確に私の関数に間違っている?

var stdout; 

function checkStatus() { 

    async.whilst(
     function(){return stdout != "Connected";}, 
     function(callback){ 
      var state; 
      state = exec("C:/ADMIN/Viscosity/ViscosityCC.exe "+'getstate '+ 1, function (error, stdout, stderr) { 
       stdout = (stdout.toString()).replace("\r\n\r\n", ""); 
       console.log(stdout); 
      }); 
      state.kill(); 
      callback(); 

     }, 
     function(err){ 
      console.log("Error"); 

     } 
    ); 

} 

checkStatus(); 
+0

私はわかりませんあなたの問題を解決しますが、 'var stdout'のスコープが上にあり、' stdout'変数も引数としてexec()のコールバックに渡されていれば、それらの名前を変更する必要があります。変更していると思われる 'stdout' varを変更していないかもしれません。 –

答えて

0

問題は、同じ名前を持つ2つの変数を持っている:

var stdout; 

// ... 

state = exec(
    "C:/ADMIN/Viscosity/ViscosityCC.exe "+'getstate '+ 1, 
    function (error, stdout, stderr) { 
     stdout = (stdout.toString()).replace("\r\n\r\n", ""); 
// which^is the^real stdout? 
     console.log(stdout); 
    } 
); 

の解決策は、2つの異なる変数名を使用することです:意志この場合

state = exec(
    "C:/ADMIN/Viscosity/ViscosityCC.exe "+'getstate '+ 1, 
    function (err, o, e) { 
     stdout = (o.toString()).replace("\r\n\r\n", ""); 
     console.log(stdout); 
    } 
); 
関連する問題