如何在完成后逐个调用函数?我有这样的代码,必须连续执行。
例如,我有:
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服务器的连接,并且执行第一个请求时,我必须解析该请求的输出并发送另一个请求,其中包含来自先前请求的数据。
我有能够做到这一切的功能;唯一的问题是如何在第一个请求完成后再发出请求。
答案 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。此外,您不需要拆除连接只是为了在同一台服务器上执行另一个命令。