node.js: Async.whilst() 回调未按预期运行
node.js: Async.whilst() callback not functioning as expected
所以首先我只想说我宁愿使用 while() 循环或 do-while() 循环,但我有一个需要回调标准输出的异步 "child-process" 函数。无论如何,当 运行 脚本时,我的函数没有在命令提示符中打印出 console.log() ,而且 exec 似乎正在创建多个进程,即使我在以下位置添加了 .kill() 函数然后结束!
我认为我的问题是基于范围界定,但我无法确定哪里出错了。那么两个问题,为什么不能使用 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();
问题是您有两个同名变量:
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);
}
);
所以首先我只想说我宁愿使用 while() 循环或 do-while() 循环,但我有一个需要回调标准输出的异步 "child-process" 函数。无论如何,当 运行 脚本时,我的函数没有在命令提示符中打印出 console.log() ,而且 exec 似乎正在创建多个进程,即使我在以下位置添加了 .kill() 函数然后结束!
我认为我的问题是基于范围界定,但我无法确定哪里出错了。那么两个问题,为什么不能使用 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();
问题是您有两个同名变量:
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);
}
);