【问题标题】:Node.js function output to variableNode.js 函数输出到变量
【发布时间】:2014-06-16 05:39:25
【问题描述】:

我有一个 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");

我如何不将输出记录到控制台,而是将其分配给输出之类的变量。

谢谢!

【问题讨论】:

  • 那么,而不是console.log 传递一个函数,其中参数可作为变量使用?问题是什么?你当然是cannot simply return it
  • 传递一个作为回调的函数。请注意它是异步运行的。
  • 我只需要能够访问数据而不是将其记录到控制台。有没有办法做到这一点,无论是否修改实际功能?如果我看起来像个菜鸟,我会提前道歉,因为我在节点
  • 我不明白你的意思@Scimonster,我怎么能在管道内调用函数?
  • 不是传递console.log,而是传递一个不同的函数,接受一个参数,这个参数就是数据。

标签: javascript node.js variables output


【解决方案1】:

您所要做的就是创建自己的回调函数,该函数可以根据您的需要对数据/结果执行任何操作。它看起来像这样:

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

然后,您可以将此函数作为参数传入,而不是 console.log。

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

【讨论】:

  • grep 代表什么?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2012-07-02
    • 1970-01-01
    • 2012-06-13
    • 2012-10-07
    • 2019-01-19
    • 2017-09-28
    相关资源
    最近更新 更多