async / await внутри цикла for для доступа к нескольким серверам с использованием ssh2 не работает - PullRequest
0 голосов
/ 13 октября 2019

У меня есть этот инструмент для доступа к нескольким серверам с использованием библиотеки 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,Есть ли способ, когда он может дождаться, пока один сервер завершит работу, прежде чем выполнить следующий?

1 Ответ

2 голосов
/ 13 октября 2019

Вы должны использовать цикл for вместо forEach, поскольку forEach на самом деле не await перед вызовом следующего элемента в массиве.

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