Node.js 等待ssh exec完成

Node.js 等待ssh exec完成,node.js,wait,Node.js,Wait,我正试图用ssh-exec包从远程主机获取信息。 这就是我的功能: getHostStats(hostnames) { var currhost; var result; for (var i = 0; i < Object.keys(hostnames).length; i++) { currhost = hostnames[i]; console.log("Current host: " + currhost);

我正试图用
ssh-exec
包从远程主机获取信息。 这就是我的功能:

getHostStats(hostnames) {
    var currhost;
    var result;
    for (var i = 0; i < Object.keys(hostnames).length; i++) {
        currhost = hostnames[i];
        console.log("Current host: " + currhost);
        exec('/root/usage.sh', {
            user: 'root',
            host: currhost,
        },
            function (err, stdout) {
                if (err) { console.error(err); }
                result = stdout.split('\n');
                console.log("Hostname: " + currhost + ", Result 1: " + result[0] + ", Result 2: " + result[1]);
            }
        );

        console.log(result);
        this.setHostInfo(currhost, result);
    }
不幸的是,不要等待
exec(…)
函数完成,因此变量
result
为空,并返回
undefined

所以我读了一些关于
wait
async
的文章,但我不知道如何让我的应用程序先等待
exec(…)
函数完成,然后记录结果

我知道这是可能的,但我的开发技能不是最好的,我真的不知道如何才能实现这一点


其他问题:ssh exec是否会在命令完成后自动关闭连接?

这是使用async/await的一种方法

函数executeshCommand(主机){
返回新承诺((解决、拒绝)=>{
exec('/root/usage.sh'{
用户:'根',
主持人:主持人,,
},(错误,标准)=>{
如果(错误){
退货拒绝(err)
}
结果=stdout.split('\n');
解决(结果)
})
})
}
异步函数getHostStats(主机名){
for(主机名的常量主机){
const results=await executeshcommand(主机)
console.log('Results for',host)
console.log(结果)
//其他自定义代码
}

}
嘿,使用此代码,我收到以下错误:
SyntaxError:await仅在异步函数中有效
,是否需要将
executeSshcommand
声明为异步函数?编辑:对不起,我的错误,忘记了使
getHostStats
async。我会尝试一下,然后告诉你不需要
wait
也可以等待承诺。您需要将对
getHostStats
的调用包含在函数中。将更新答案看一看:“因为主作用域不是异步的,所以您需要执行一个异步匿名函数来调用您的函数及其本身:”是的,忘记了
async
关键字
console.log(result);
this.setHostInfo(currhost, result);