Добрый день.
У меня JS узел вызывает web service loginom, через несколько минут возникает ошибка "Ошибка при выполнении HTTP запроса. TCP/IP Socket error 104: Connection reset by peer"
С чем это может быть связано?
Код JS узла
import { InputTable, InputTables, InputVariables, OutputTable, DataType, DataKind, UsageType } from "builtIn/Data";
import { fetch, Request, Headers } from "builtIn/Fetch";
let url = InputVariables.Items[0].Value;
let json_data = InputTables[0].Get(0, 0);
// Создание объекта заголовков запроса:
let headers = new Headers({ "Content-Type": "application/json" })
// Функция для задержки
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// Функция для выполнения запроса с повторами
async function fetchWithRetry(request, maxRetries = 5, retryDelay = 5000) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
console.log(`Попытка ${attempt} из ${maxRetries}`);
let response = await fetch(request);
// Если ответ успешный, возвращаем его
if (response.ok) {
return response;
}
// Если статус ошибки и это не последняя попытка, ждем и повторяем
if (attempt < maxRetries) {
console.log(`Ошибка статуса ${response.status}. Ожидание ${retryDelay}мс перед повтором...`);
await delay(retryDelay);
} else {
// Последняя попытка - возвращаем ответ даже если ошибка
return response;
}
} catch (e) {
console.log(`Попытка ${attempt}: Ошибка - ${e.message}`);
// Если это не последняя попытка, ждем и повторяем
if (attempt < maxRetries) {
console.log(`Ожидание ${retryDelay}мс перед повтором...`);
await delay(retryDelay);
} else {
// Последняя попытка - выбрасываем ошибку
throw e;
}
}
}
}
// Создание объекта запроса:
let request = new Request(url, {
method: "post",
headers: headers,
body: json_data,
//timeout: 3000000
});
(async () => {
try {
// Выполняем запрос с повторами (5 попыток, 5 секунд между ними (5000 = 5 сек))
let response = await fetchWithRetry(request, 5, 5000);
//let response = await fetch(request);
let response_text = await response.text();
let response_status = response.status;
let array = [];
array.push({ Name: 'status', DisplayName: 'status', DataType: DataType.String, DefaultUsageType: UsageType.Active });
array.push({ Name: 'response', DisplayName: 'response', DataType: DataType.String, DefaultUsageType: UsageType.Active });
// Добавление массива столбцов
OutputTable.AssignColumns(array);
// Добавление строки в выходной набор данных
OutputTable.Append();
OutputTable.Set(0, response_status.toString());
OutputTable.Set(1, response_text);
} catch (e) {
console.log("Ошибка:", e.message);
// Добавьте обработку ошибки в OutputTable
let array = [];
array.push({ Name: 'status', DisplayName: 'status', DataType: DataType.String, DefaultUsageType: UsageType.Active });
array.push({ Name: 'response', DisplayName: 'response', DataType: DataType.String, DefaultUsageType: UsageType.Active });
OutputTable.AssignColumns(array);
OutputTable.Append();
OutputTable.Set(0, "error");
OutputTable.Set(1, e.message);
}
})();