1

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

例如,我有:

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 服务器的连接建立并执行第一个请求时,我必须解析此请求的输出并发送另一个请求,其中包含上一个请求的数据。

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

4

2 回答 2

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

于 2013-10-24T15:54:28.153 回答
0

从它的声音来看,您可能想要研究一个控制流节点模块,例如async。此外,您不需要为了在同一服务器上执行另一个命令而断开连接。

于 2013-10-25T01:09:56.037 回答