顺序执行请求

时间:2013-10-24 07:55:15

标签: node.js scripting ssh

如何在完成后逐个调用函数?我有这样的代码,必须连续执行。

例如,我有:

var Connection = require('ssh2');

var c = new Connection();
c.on('connect', function() {
  console.log('Connection :: connect');
});
c.on('ready', function() {
  console.log('Connection :: ready');
  c.exec('uptime', function(err, stream) {
    if (err) throw err;
    stream.on('data', function(data, extended) {
      console.log((extended === 'stderr' ? 'STDERR: ' : 'STDOUT: ')
                  + data);
    });
    stream.on('end', function() {
      console.log('Stream :: EOF');
    });
    stream.on('close', function() {
      console.log('Stream :: close');
    });
    stream.on('exit', function(code, signal) {
      console.log('Stream :: exit :: code: ' + code + ', signal: ' + signal);
      c.end();
    });
  });
});
c.on('error', function(err) {
  console.log('Connection :: error :: ' + err);
});
c.on('end', function() {
  console.log('Connection :: end');
});
c.on('close', function(had_error) {
  console.log('Connection :: close');
});
c.connect({
  host: '192.168.100.100',
  port: 22,
  username: 'frylock',
  privateKey: require('fs').readFileSync('/here/is/my/key')
});

我可以用什么方式逐个调用多个函数?当建立与ssh2服务器的连接,并且执行第一个请求时,我必须解析该请求的输出并发送另一个请求,其中包含来自先前请求的数据。

我有能够做到这一切的功能;唯一的问题是如何在第一个请求完成后再发出请求。

2 个答案:

答案 0 :(得分:0)

您可以使用嵌套回调。在每个请求的“结束”处理程序中,创建一个新连接并设置其结束处理程序。直到需要为止。类似于:

c.on('end', function() {
    // after c is done, create newC
    var newC = new Connection();
    newC.on('end', function() {
         // more if needed.
    });
});

另一种方法是使用promises的某些库,例如Q,这会清除很多语法。

您还可以查看以下问题:Understanding promises in node.js

答案 1 :(得分:0)

从它的声音中,您可能想要查看控制流节点模块,例如async。此外,您不需要拆除连接只是为了在同一台服务器上执行另一个命令。