router.post('/runCommand', async function(req, res){
let results = [];
async.each(req.body.requests, async function(request, callback){
const data = await connect(request.command)
await results.push(data);
await callback(null);
}, function(err){
if (!err) {
res.send(202, results)
}
})
})
Res.send никогда не выполняется, и кажется, что обратный вызов происходит до завершения соединения. Connect успешно возвращает обещание, потому что это
router.get('/topics', async function(req, res) {
console.log('in get');
const data = await connect(req.body.command);
await res.send(data);
});
отлично работает. Но включение async.each для запуска нескольких команд кажется неработоспособным. Я знаю, что это проблема с тем, как я вызываю функцию обратного вызова async.each, но исследование не помогло, как я должен был вызывать ее. Можно ли использовать .then()
после ожидания обещания?
function connect(command){
return new Promise(function(resolve) {
let host = {
server: {
host: "host",
port: "port",
userName: "user",
password: config.Devpassword
},
commands: [ command ]
};
var SSH2Shell = require ('ssh2shell'),
//Create a new instance passing in the host object
SSH = new SSH2Shell(host),
//Use a callback function to process the full session text
callback = function(sessionText){
console.log(sessionText)
resolve(sessionText);
}
SSH.connect(callback);
})
};