async/await 在 for 循环内使用 ssh2 访问多个服务器不起作用
async/await inside a for loop to access multiple servers using ssh2 do not work
我有这个工具可以使用 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);
}
})
我有这个工具可以使用 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);
}
})