node.js:Async.whilst()回调无法按预期运行

时间:2017-04-04 22:34:21

标签: javascript node.js scopes

首先,我想说我宁愿使用while()循环或do-while()循环,但我有一个async" 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();

1 个答案:

答案 0 :(得分: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);
    }
);