2017-04-04 120 views
0

所以首先我想說的是,我寧願使用while()循環或do-while()循環,但我有一個異步「子進程「功能,需要回調標準輸出。無論如何,在運行腳本時,我的函數不會在命令提示符下輸出console.log(),即使在我添加.kill()函數的時候,exec似乎也在創建多個進程!node.js:Async.whilst()回調未按預期運行

我的問題我相信是基於範圍界定的,但我無法確定我要出錯的地方。所以有兩個問題,爲什麼不能使用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

的問題是你有兩個變量具有相同的名稱:

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); 
    } 
); 

的解決方案是使用兩個不同的變量名:

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