for循环内的异步/等待,无法使用ssh2访问多个服务器
我拥有使用npm库ssh2访问多个服务器的工具。我想遍历所有这些服务器,以自动对所有这些服务器中的某个文件进行更改。这是到目前为止我所做的代码片段。
const c = require('./constants');
const Client = ssh2.Client;
const conn1 = new Client();
const conn2 = new Client();
const conn3 = new Client();
const serverTuple = [
[conn1, c.SERVER_1],
[conn2, c.SERVER_2],
[conn3, c.SERVER_3]
]
(async () => {
try {
serversTuple.forEach(
async value => await accessServers(value[0], value[1])
);
} catch (err) {
console.log(err);
}
})
我的问题是这个:
当我启动程序时,它直接进入SERVER_3,而没有实际处理SERVER_1和SERVER_2。有没有一种方法可以等待一台服务器先完成再执行下一台服务器?
回答如下:您应该使用for
循环而不是forEach
,因为在调用数组中的下一个之前,forEach
实际上不是await
。
(async () => {
try {
for(let value of serversTuple){
await accessServers(value[0], value[1])
}
} catch (err) {
console.log(err);
}
})