首页 > 解决方案 > 使用 ssh2 访问多个服务器的 for 循环中的 async/await 不起作用

问题描述

我有这个工具,可以使用 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。有没有一种方法可以在执行下一个服务器之前等待一个服务器首先完成?

标签: node.jsnpmssh2

解决方案


您应该使用for循环而不是forEach,因为在调用数组中的下一项之前forEach实际上并没有这样做。await

(async () => {
    try {
        for(let value of serversTuple){
            await accessServers(value[0], value[1])
        }
    } catch (err) {
         console.log(err);
    }
})

推荐阅读