Я работаю над сценарием, который получает данные из API и отображает их в пользовательском интерфейсе, используя Socket.io , этот сценарий запускается одновременно.
const express = require("express");
const app = express();
const http = require("http").Server(app);
const io = require("socket.io")(http);
function mainBody() {
oldTime = new Date().getTime();
// Set the headers
let headers = {
Authorization: "Bearer XXXXXXXXXXX",
"Content-Type": "application/json"
};
let n = 0;
let r = 0;
j = 0;
const handleResultsForRequest = function(err, response, body) {
if (!err && response.statusCode === 200) {
const js = JSON.parse(body);
if (undefined !== JSON.stringify(js)) {
const data_key = js.eventId + "_" + JSON.parse(body).start;
data[data_key] = js;
} else console.log("status code:" + response.statusCode);
}
};
let array = [
103307565,
103771668,
103621400,
103675790,
103887500,
];
itemCal = 0;
array.forEach(async function(item, index, array) {
n = 0;
// Configure the request
options = {
url: "https://api.XXXXXXXXXXXXX",
method: "GET",
headers: headers,
qs: { eventId: item, pricingsummary: true, rows: "250", start: n }
};
Request(options, function(err, response, body) {
itemCal++;
if (err) {
console.log("ERROR: " + err);
} else {
try {
const js = JSON.parse(body);
r = js.totalListings;
r = Math.floor(r / 250) + 1;
n = 0;
for (let i = 0; i < r; i++) {
// Configure the request
options = {
url:
"https://api.XXXXXXXXXXXXXXXXXXXX",
method: "GET",
headers: headers,
qs: { eventId: item, pricingsummary: true, rows: "250", start: n }
};
n += 250;
Request(options, handleResultsForRequest);
}
} catch (e) {
console.log(e);
}
}
if (itemCal == array.length) {
var currentTime = new Date().getTime();
io.emit("data",diff);
mainBody();
}
});
});
}
mainBody();
В файле есть массив с 5 идентификаторамикоторые выполняются в цикле и в конце скрипта после выполнения всех циклов, есть socket.emit () и после emit data, mainBody () запускается снова, и это выполнение будет выполняться непрерывно и передавать данные клиенту при каждом выполнении.
Проблема: В настоящее время в примере с 5 идентификаторами в массиве я показываю, что этот сценарий работает нормально до 500 идентификаторов, но я поставил более 500 - 550 идентификаторов, а затем его возвращение с этой ошибкой.
socket hang up
at createHangUpError (_http_client.js:331:15)
at TLSSocket.socketOnEnd (_http_client.js:423:23)
at emitNone (events.js:111:20)
at TLSSocket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9) code: 'ECONNRESET' }
И перестал передавать данные клиенту.Любая помощь будет признательна.:) Заранее спасибо.