Не корректно выполняется код

нужна помощь с модулем, пишу модуль для обработки поиска других участников в локальной сети, и проблема в том, что скрипт выполняет код сначала после цикла судя по всему а потом уже сам код который в цикле, просьба простить за корявое описани проблемы, если будут вопросы - спрашивайте. Код :

const { getIPRange } = require('get-ip-range');
const fs = require('fs');
const net = require('net');
const data = fs.readFileSync("../conf/config.json", "utf8");
const config = JSON.parse(data);
const array = getIPRange(config.network_configuration.network);

const available_nodes = Array();
for (let x = 0; x < array.length; x++) {

    const client = net.connect({port: 14050, hostname: array[x]});
    
        client.write("ver");
    
        client.on("data", (data) => {
            if (data.toString().includes("FreeP2P v") == true) {
                console.log("nice"); // Debug message (Выполняется после цикла почему-то.)
                available_nodes.push(array[x]);
                client.end();
            }
        });
    
        client.on("error", (err) => {});
        if (x != array.length - 1){
            break;
        }
        x++;
}
console.log(available_nodes);

Файл конфигурации из кода:

{
    "network_configuration":
    {
        "network":"192.168.0.1/24"
    }   
}

Ответы (1 шт):

Автор решения: nörbörnën
const { getIPRange } = require('get-ip-range');
const net = require('net');

(async () => {
  const ipAddresses = getIPRange('192.168.0.1/24');
  const res = await Promise.allSettled(
    ipAddresses.map((ip) => new Promise((resolve, reject) => {
      try {
        const socket = net.connect(
          { port: 14050, host: ip, timeout: 5 * 1000 },
          () => {
            socket.once('data', (chunk) => {
              resolve(
                chunk.toString('utf-8').includes('FreeP2P v')
              );
              socket.destroy();
            });
            socket.write('ver');
          }
        );

        socket.on('error', (err) => reject(err));
        socket.on('timeout', () => {
          reject(new Error('TIMED_OUT'));
          socket.destroy();
        });
      } catch (err) {
        reject(err);
      }
    })),
  );

  const availableNodes = res.reduce(
    (acc, x, idx) => {
      if (x.status === 'fulfilled' && x.value === true) {
        acc.push(ipAddresses[idx]);
      }
      return acc;
    },
    [],
  );

  console.log('availableNodes', availableNodes);
})();

→ Ссылка