【问题标题】:node.js: Async.whilst() callback not functioning as expectednode.js:Async.whilst() 回调未按预期运行
【发布时间】:2017-04-05 10:38:01
【问题描述】:

首先我想说的是,我宁愿使用 while() 循环或 do-while() 循环,但我有一个需要回调 stdout 的异步“子进程”函数。无论如何,在运行脚本时,我的函数没有在命令提示符中打印出 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 范围在顶部,然后您将 stdout 变量也作为参数传递给 exec( ),您应该重命名其中任何一个。您可能没有修改您认为正在修改的 stdout var。

标签: javascript node.js scopes


【解决方案1】:

问题是你有两个同名的变量:

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

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-23
    • 2014-11-12
    • 1970-01-01
    • 2020-06-28
    • 2012-02-18
    相关资源
    最近更新 更多