【问题标题】:Socket.io: Client receiving empty object/array despite data existing on serverSocket.io:尽管服务器上存在数据,但客户端仍接收空对象/数组
【发布时间】:2019-10-16 20:15:33
【问题描述】:

我正在使用 socket.io。即使我可以在尝试将数据发送回调用客户端之前 console.log() 数据(对象数组),我也无法从服务器接收数据。如果我将信息硬编码到发射中,它将显示在客户端上,但是当我使用动态创建的对象数组时,它不会通过。我的直觉告诉我这是一个异步问题,但我正在使用 bluebird 来管理它。也许它是一个编码问题?我试过 JSON.stringify 和 JSON.parse,没有骰子。

服务器

 socket.on('getClassList', function(){
    sCon.getClassList()
    .then(function(data){
        console.log(data) //data is an array full of objects
        socket.emit('STC_gotDatList', data)
    })    
  })

硬编码的预期输出:

classes['moof'] = {
    accessList: [888],
    connectedList: [],
    firstName: "sallyburnsjellyworth"
}

客户

socket.on('STC_gotDatList', function(info){
    console.log(info) //prints [] or {}
})

编辑:

我记得在某处读到 console.log() 在数据可用/填充时可能没有打印数据。即使我使用 Promises,也可能是这样吗?在我发出数据时,它还没有被填充到数组中?我将如何解决这种情况?

编辑2:

更近一步。为了让任何东西返回,出于某种原因,我必须返回“类”数组中的每个特定对象。它不允许我发送整个数组,对于我上面给出的示例,要向客户端获取数据,我必须返回(类 ['moof']),不能返回(类)来获取整个数组。 .. 不知道为什么。

EDIT3:解决方案:你不能这样做。我必须将“moof”作为属性(className)放入类中,然后我才能传递整个类数组。

【问题讨论】:

    标签: socket.io


    【解决方案1】:

    “类”数组是如何创建的?

    问题可能是它被动态地赋予属性,但没有被创建为一个对象,而是一个数组。 如果您打算为其动态添加属性(如属性 moof),则应将其创建为对象(使用 {})而不是数组(使用 [])。

    试试

    var classes = {};//instead of classes = []
    //then fill it however you do it
    classes[property] = {
        accessList: [888],
        connectedList: [],
        firstName: "sallyburnsjellyworth"
    };
    

    另外,功劳归于Felix,我只是转述他的回答:https://stackoverflow.com/a/8865468/7573546

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 2011-03-03
      • 2022-01-24
      • 2017-07-25
      • 1970-01-01
      • 2012-04-07
      • 1970-01-01
      相关资源
      最近更新 更多