0

首先,很抱歉我对节点缺乏了解,我可能犯了一些大的菜鸟错误。在下面的示例中,我尝试将变量设置为具有连续变化输出的函数,监听该变量的变化,并在变量值发生变化时输出新结果。这是我收到的以下错误,我不知道该怎么做。

cli.js:15
result.on('data', function(data) {
       ^
TypeError: Object function () {
    runCommand('watch','-n1 ps -ef | grep node');
} has no method 'on'

这是我的示例代码:

var spawn = require('child_process').spawn;

function runCommand(arg1,arg2) {
    var cmd = spawn(arg1,[arg2]);
    cmd.stdout.setEncoding('utf8');
    cmd.stdout.on('data', function(data) {
        return data;
    });
}

var result = function() {
    runCommand('watch','-n1 ps -ef | grep node');
}

result.on('data', function(data) {
    console.log(result);
});

我在 Linux 版本上运行它。

4

2 回答 2

1

.on('data'..您应该记录结果,而不是从中返回数据。这实际上不应该返回任何东西,因为它是一个异步回调

此外,您无需创建要使用的函数runCommand,只需在代码中的某处调用该方法即可。您还需要注意,-n1并且ps -ef | grep node应该是单独的参数。

var spawn = require('child_process').spawn;

// Add a callback argument to runCommand.
function runCommand(arg1, arg2, callback) {
    // Remove the [] around arg2.
    var cmd = spawn(arg1,arg2);
    cmd.stdout.setEncoding('utf8');
    cmd.stdout.on('data', callback);
}

// Instead of passing one long string as arg2, use an array to pass each argument.
runCommand('watch', [  '-n1', 'ps -ef | grep node' ], function (data) {
    // Log the output in the callback.
    console.log('Data received: ' + data);
});
于 2013-11-01T18:22:31.730 回答
0

在做了更多搜索之后,我需要做的是创建一个自定义事件处理程序。这是我想出的例子:

var spawn = require('child_process').spawn;
var events = require('events');
var util = require('util');

runCommand = function (arg1,arg2) {
    var self = this;
    var cmd = spawn(arg1,arg2);
    cmd.stdout.setEncoding('utf8');
    cmd.stdout.on('data', function(data) {
        self.emit('updated', data);
    });
}
util.inherits(runCommand, events.EventEmitter);

var result = new runCommand('watch',['date +%s']);

result.on('updated', function(data) {
    console.log('command ran');
});
于 2013-11-02T00:06:17.093 回答