2013-10-24 6 views
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 установлено и выполняется первый запрос, я должен проанализировать вывод этого запроса и отправить другой запрос с данными из предыдущего запроса.

У меня есть функции, которые могут делать все это; единственная проблема заключается в том, как сделать другой запрос после завершения первого.

ответ

0

Вы можете использовать вложенные обратные вызовы. В обработчике «end» каждого запроса создайте новое соединение и настройте его обработчик. Гнездо, пока это не понадобится. Аналогично:

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

0

от звуков этого, вы можете захотеть взглянуть на модуль узла потока управления, таких как async. Также вам не нужно разорвать соединение только для выполнения другой команды на том же сервере.

Смежные вопросы