Не корректно выполняется код
нужна помощь с модулем, пишу модуль для обработки поиска других участников в локальной сети, и проблема в том, что скрипт выполняет код сначала после цикла судя по всему а потом уже сам код который в цикле, просьба простить за корявое описани проблемы, если будут вопросы - спрашивайте. Код :
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);
})();