簡體   English   中英

將數據從 socket.io 推送到數組中

[英]Pushing data from socket.io into array

我有以下問題,我似乎無法解決。 我試圖從我的 socket.io 發射器中獲取一個數組數組,其結構如下:

[ [{...},{...},{...}] , [{...},{...}] , [{...}] ]

相反,我得到了這個:

在此處輸入圖片說明

我需要一個主陣列中的所有陣列,以便我可以為每個子陣列渲染引導卡。

客戶端代碼:

const socket = io("http://localhost:5000");

    socket.on('data', (dta) => {
        handleData(dta.data);  
    })

    function handleData(data) {
      const masterArray= [];
        masterArray.push(data);  
        console.log(masterArray);   
    }

服務器端代碼:

for(let i = 0 ; i < alarmpanels.length ; i++) {
const ElkClient = elkClient.ElkClient;
    let client = new ElkClient({
        connection: {
          name: alarmpanels[i].name,
          host: alarmpanels[i].host,
          port: alarmpanels[i].port,
          secure: alarmpanels[i].secure,
          zones: alarmpanels[i].zones
     }
  });

  connectClient(client);
}

  async function connectClient(client) {
    await client.connect();
    const zonesArray = client.options.connection.zones;
    const arr = [];
      try {
        const clhost = client.options.connection.host;
        const clport = client.options.connection.port;
        const clsecure = client.options.connection.secure;
        let data = await client.getArmingStatus();
        for (i = 0 ; i < zonesArray.length ; i ++) {
        const armUpState = await data.areas[i].armUpState;
        const clName = client.options.connection.name;
        const zoneName = zonesArray[i].name;
        const siteName = zonesArray[i].site;
        const clzone = zonesArray[i].zone;
        const totalPanels = zonesArray[i].length;

        const info = new PanelStatus(clhost, clport ,clsecure, clzone, siteName, clName, zoneName, armUpState, totalPanels);
        arr.push(info);
        }


      io.on('connection', (socket, req) => {
          socket.emit('data', {data: arr});
        })

      }
      catch (err) {
        console.log("Connection Lost!");
      }

    }

您的客戶端代碼需要稍作更改
1) 將 masterArray 聲明保留在 handleData 之外
2) 推送到 masterArray 時,使用... spread 運算符。

 const masterArray = []; /* const socket = io("http://localhost:5000"); socket.on("data", dta => { handleData(dta.data); }); */ function handleData(data) { masterArray.push(...data); } handleData([{ a: 4 }, { b: 5 }]); handleData([{ z: 4 }]); handleData([{ p: 4 }, { q: 5 }, { r: 5 }]); console.log(masterArray);

如果可以使用 es2020,則可以使用 Array.flat()

 let startingArray = [ [{ entry1: 1, entry2: 2, entry3: 3 }, { entry4: 4, entry5: 5, entry6: 6 }, { entry7: 7, entry8: 8, entry9: 9 }], [{ entry10: 10, entry11: 11, entry12: 12 }, { entry13: 13, entry14: 14, entry15: 15 }], [{ entry16: 16, entry17: 17, entry18: 18 }] ] const flattened = startingArray.flat() console.log('startingArray', startingArray) console.log('flattened', flattened)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM