异步获取的值赋值给一个对象属性之后,为什么遍历不出来

1.我需要做一个用户会话列表,先拿到了一个会话列表,由于列表里面没有用户头像,所以我在拿到列表数据之后,遍历数据(items),异步获取到用户信息(serviceInfo)之后把他赋值给当前的item,我在打印会话列表数据的时候可以看到用户信息,但是在实际使用的时候却发现没有这个属性,问题就是,为什么没法使用属性?
2.

clipboard.png

上面一行的打印结果,(这里有个问题,同样是对象,为什么在控制台的表现不一样,一个是Object,一个是{})

clipboard.png

下面一行的打印结果

clipboard.png

拿到消息列表后,遍历列表,获取对应的用户信息
clipboard.png

获取到用户信息后赋值
clipboard.png

3.我用for in遍历的时候,发现也是没有这个属性,说明这个属性根本没有添加成功,刚开始感觉可能是对象拷贝的问题,因为用户信息是一个对象,但是后来改变了赋值方法,发现一样

问题描述

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

阅读 3.1k
2 个回答

首先是关于 console.dir(object)console.dir(value) 的区别:
前者会打印 object 此时内存中的状态:

const obj = {a: 1}
console.dir(obj)
console.log('before', obj.a)
setTimeout(() => (obj.a = 2; console.log('after', obj.a)), 500)

输出结果:

{a: 2}
before 1
before 2

如果想看到一个对象在某一时刻的全部属性的值,只有通过 debugger

然后,从你的第二张截图来看,赋值是成功了的,可能是你 for in 的时机不对,比如,在异步完成前就开始 for in

大家有遇过类似的情况吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题