Почему не все данные попадают в массив
function removeDuplicates(items) {
const uniqueItems = new Map();
for (let item of items) {
const key = `${item.exchange}-${item.symbol}`;
if (!uniqueItems.has(key)) {
uniqueItems.set(key, item);
}
}
return Array.from(uniqueItems.values());
}
const path = "wss://open-api-swap.bingx.com/swap-market";
const response = await fetch(`https://open-api.bingx.com/openApi/spot/v1/ticker/price`)
let data = await response.json()
let arrSpot = data.data.map(i => i.symbol.replace(/\_/g, '-'))
console.log(arrSpot.length)
let coins = []
let socketsBingx = Math.ceil(arrSpot.length / 29)
let start = 0, end = 29;
for (let i = 0; i < socketsBingx; i++){
let markets = arrSpot.slice(start, end)
let ws = new WebSocket(path);
ws.onopen = function (){
console.log('Websocket connected', i)
//console.log(markets)
for (let coin of markets) {
ws.send(JSON.stringify({"id": `${coin} - 1`, "reqType": "sub", "dataType":
`${coin}@depth5@500ms`}));
}
}
ws.onmessage = function (message){
const buf = Buffer.from(message.data);
const decodedMsg = zlib.gunzipSync(buf).toString('utf-8');
//console.log(decodedMsg)
if (decodedMsg === "Ping") {
//console.log(data)
ws.send('Pong');
//console.log('Pong');
}else {
let data = JSON.parse(decodedMsg);
let coin = {
"exchange": "BINGX",
"symbol": data?.dataType?.split('@')[0].replace(/\-/g, ''),
"time": data?.data?.lastUpdateId,
"bids": data?.data?.bids,
"asks": data?.data?.asks,
"link": `https://bingx.com/ru-ru/spot/${data?.dataType?.split('@')
[0].replace(/\-/g, '')}`
}
receivedMessage = decodedMsg;
if (coin.symbol !== undefined) {
//console.log(coin.symbol)
coins.push(coin)
}
}
}
ws.onerror = function (){
console.log('error')
}
ws.onclose = function (){
console.log('close')
}
start += 29
end += 29
}
setInterval(()=>{
console.log(coins.length)
coins = removeDuplicates(coins)
console.log(coins.length)
}, 10000)
получаю список монет, в документации написанно 30 подписок для одного подключения, создаю несколько подключений, все вроде работает, ошибок нет, сервер Ping присылает, но в итоге в массиве coins после удаления дубликатов записи только о 285 монетах. Что не так? Подскажите, пожалуйста, как правильно это сделать?