Почему не все данные попадают в массив

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 монетах. Что не так? Подскажите, пожалуйста, как правильно это сделать?


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