在 async.each 回调前等待承诺
await promise before callback in async.each
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 从未发生,回调似乎在连接完成之前发生 运行ning。连接成功返回一个承诺,因为这个
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);
})
};
虽然您可以继续花费更多时间让 async.each()
正常工作,但我建议您放弃它并专门使用 async
/ await
语法,这样可以简化您的代码很多:
router.post('/runCommand', async function (req, res) {
try {
const results = await Promise.all(
req.body.requests.map(({ command }) => connect(command))
);
res.send(202, results);
} catch ({ message, stack }) {
res.send(500, { error: message, stack });
}
})
查看 ssh2shell
文档,我认为您的 connect
函数也可以改进,以提高可读性和错误处理能力:
const SSH2Shell = require('ssh2shell');
function connect (command) {
return new Promise((resolve, reject) => {
const host = {
server: {
host: 'host',
port: 'port',
userName: 'user',
password: config.Devpassword
},
commands: [command]
};
//Create a new instance passing in the host object
const SSH = new SSH2Shell(host);
SSH.on('error', reject);
SSH.connect(resolve);
});
}
如果这仍然不适合您,请随时发表评论。
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 从未发生,回调似乎在连接完成之前发生 运行ning。连接成功返回一个承诺,因为这个
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);
})
};
虽然您可以继续花费更多时间让 async.each()
正常工作,但我建议您放弃它并专门使用 async
/ await
语法,这样可以简化您的代码很多:
router.post('/runCommand', async function (req, res) {
try {
const results = await Promise.all(
req.body.requests.map(({ command }) => connect(command))
);
res.send(202, results);
} catch ({ message, stack }) {
res.send(500, { error: message, stack });
}
})
查看 ssh2shell
文档,我认为您的 connect
函数也可以改进,以提高可读性和错误处理能力:
const SSH2Shell = require('ssh2shell');
function connect (command) {
return new Promise((resolve, reject) => {
const host = {
server: {
host: 'host',
port: 'port',
userName: 'user',
password: config.Devpassword
},
commands: [command]
};
//Create a new instance passing in the host object
const SSH = new SSH2Shell(host);
SSH.on('error', reject);
SSH.connect(resolve);
});
}
如果这仍然不适合您,请随时发表评论。