0

I have this tool that access multiple servers using the npm library ssh2. I want to loop through all these servers to automate an alteration to a certain file inside all these servers. Here is the code snippet of what I have done so far.

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);
    }
})

My problem is this:

When I start my program, it goes straight to SERVER_3 without actually processing SERVER_1 and SERVER_2. Is there a way where it can wait for one server to finish first before executing the next one?

R. Tienzo
  • 13
  • 3

1 Answers1

2

You should use a for loop instead of forEach, as forEach doesn't actually await before calling the next item in the array.

(async () => {
    try {
        for(let value of serversTuple){
            await accessServers(value[0], value[1])
        }
    } catch (err) {
         console.log(err);
    }
})
somethinghere
  • 16,311
  • 2
  • 28
  • 42