首页 > 解决方案 > 发送数组以发出导致最大调用堆栈大小超出 Javascript socket.io

问题描述

我有一个功能:

    //  ***************     Send Players their cards     ***************
function sendplayerThierCards(myplayerNum, myN_Cards){
  console.log("sending player: "+ myplayerNum + " their cards: " + myN_Cards);
  socket.emit('playersCards', {
    playerNum: myplayerNum,
    myCards: myN_Cards,
    room: code
  });
}

调用它的代码:

let myHand = new Array();
for(let i=0; i<5; i++)
    myHand[i] = player1Hand[i]
sendplayerThierCards(1,myHand);

如果我将字符串发送到 myN_Cards,则调用发出。如果我将数组发送到 myN_Cards,我会收到错误消息:“最大调用堆栈大小超出了 Javascript”

服务器在这里: https ://github.com/tsehnoutka/GameServer

游戏代码在这里: https ://github.com/tsehnoutka/callStackSizeExceeded

这对我来说没有意义,因为我能够在我的代码的另一部分发送一个数组。另一个数组:

var playerInfo = [{
    name: "Red",
    color: "red",
        background: "Coral"
  },
  {
    name: "Blue",
    color: "blue",
        background: "LightSkyBlue"
  },
  {
    name: "Green",
    color: "green",
        background: "Lime"
  },
  {
    name: "Yellow",
    color: "yellow",
        background: "#fcfce8"
  },
];

及其作用:

//  ***************     Send All Players     ***************
function sendAllPlayersJoined(){
  console.log("sending all players info");
  socket.emit('allPlayersNames', {
    players: playerInfo
  });
}

标签: javascriptsocketsemit

解决方案


我改变了我发送的数据量,它似乎有效,而不是整张卡,我只是发送等级和花色

for ( i = 0; i < 5; i++)
  myHand[i] = {suit: player1Hand[i].suit, rank: player1Hand[i].rank};
sendplayerThierCards(1, myHand);

感谢大家


推荐阅读