我正在使用socket.io。我在从服务器接收数据时遇到问题,即使我在尝试将数据发送回调用客户端之前就可以调用console.log()数据(对象数组)。如果我将信息硬编码到emit中,它将显示在客户端上,但是当我使用动态创建的对象数组时,它不会通过。我的直觉告诉我它是一个asyn问题,但我正在使用蓝鸟来管理它。也许它是一个编码问题?我尝试了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,这可能是它吗?在我发出数据的时候,它还没有被填充到数组中?我将如何解决这种情况?
EDIT2:
更接近一步。为了获得任何返回,由于某种原因,我必须返回'classes'数组中的每个特定对象。它不允许我发送整个数组,对于我上面给出的例子,将数据提供给客户端,我必须返回(classes ['moof']),不能返回(类)来获取整个数组。 ..不知道为什么。
EDIT3:解决方案:你不能这样做。我必须将'moof'作为属性(className)放在类中,然后我能够传递整个类数组。
答案 0 :(得分:1)
如何创建'classes'数组?
问题可能是它被动态赋予属性,但尚未创建为对象,而是数组。 如果您计划动态添加属性(如属性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