Node.js函数输出到变量

时间:2014-06-16 05:39:25

标签: javascript node.js variables output

我有一个grep函数,我用它来分离一些数据。

我遇到了一个问题,而不是将数据输出到控制台,我需要它将它存储到变量中。

例如,这是我的实际功能。

function funGrep(cmd,callback,search,args){
    exec(cmd,function(err,stdout){
        if(!stdout)
            return;
        var lines = stdout.toString().split(EOL);
        var re = new RegExp(search,args);
        for(var line in lines){
            var results = lines[line].match(re);
            if(results){
                for(var i = 0; i < results.length; i++){
                    callback(results[i]);
                }
            }
        }
    });
}

这是我对该功能的实际调用。

funGrep("ping -n 3 google.com",console.log,"time=[0-9\.]+ ?ms");

而不是将输出记录到控制台,我怎样才能将它分配给变量如输出。

谢谢你!

2 个答案:

答案 0 :(得分:0)

您所要做的就是创建自己的回调函数,根据您的需要处理数据/结果。它看起来像这样:

function theCallback (data) {
    ... do whatever you want with your data ...
}

然后代替console.log,您将传递此函数作为参数。

funGrep("ping -n 3 google.com",theCallback,"time=[0-9\.]+ ?ms");

答案 1 :(得分:0)

您可以使用回调将数据附加到变量,并修改回调以在函数完成时通知处理程序:

function funGrep(cmd,callback,search,args){
    exec(cmd,function(err,stdout){
        if(err){
            console.log(err);
            return;
        }
        if(!stdout)
            return;
        var lines = stdout.toString().split(EOL);
        var re = new RegExp(search,args);
        for(var line in lines){
            var results = lines[line].match(re);
            if(results){
                for(var i = 0; i < results.length; i++){
                    callback(results[i],false);
                }
            }
        }
        callback(null,true); //finsished
    });
}

var myData = [];
funGrep("ping -n 3 google.com",function(result,finished){if(!finished) myData.push(result); else goOn();},"time=[0-9\.]+ ms");

function goOn(){
    //funGrep finished
    console.log("Result: " + myData);
}