首页 > 解决方案 > 如何从浏览器控制台上可见的对象获取数据,但在我的代码上手动遍历它时返回 null?

问题描述

//listen for messages
channel.on("messageAdded", function (message) {
    //render new message    
    console.log("New awesome message", message)
    //this is null for some reason
    console.log("Stringify 3",JSON.stringify(message.state.aggregatedDeliveryReceipt))
}

但是通过控制台右键单击将其存储为全局对象, 目的

我能够做一个 console.log(temp1.state.aggregatedDeliveryReceipt)

然后回来

收货状态

问题是,当我state.aggregatedDeliveryReceipt 在我的 JS 文件上使用它时,我无法得到想要的结果。它说它是null

在谷歌搜索后,我了解到它是某种构造函数......

Firebase:执行获取时得到一个奇怪的`e`对象

我试过的:

  1. JSON.stringify()在 temp1 上使用

结果: 未捕获的类型错误:将循环结构转换为 JSON --> 从带有构造函数“l”的对象开始 | property '_fsm' -> object with constructor 'o' --- property 'context' 闭合圆圈

  1. 用在temp1.state

结果:

{"sid":"IMd0XXXXXXXfd8aa","index":532,"author":"XXXX","body":"XXXX","timestamp":"2020-XXXXX:12.XX","dateUpdated":"2020-11-XXXXX:12.574Z","lastUpdatedBy":null,"attributes":{},"type":"text","media":null,"participantSid":"MB0a5d2XXXXXXX27ddf4da6","aggregatedDeliveryReceipt":null}
  1. 使用它,temp1.state.aggregatedDeliveryReceipt也被退回null

  2. 直接在控制台上执行 日志 结果:它有效,但我无法在我的 JS 文件上复制它。由于某种原因,控制台可以直接看到它,但不能通过我的代码

标签: javascriptobjectconstructortwilioconsole.log

解决方案


如果您在 devtools 控制台与您的代码中获得不同的行为,则可能是时间问题。当您尝试在 devtools 控制台中访问数据时,数据很可能已经加载,而如果您在代码中过早访问它,则可能没有。

作为第一步,使用setTimeout()将读取值的代码延迟相当长的时间(几秒钟),然后查看它是否可以正确读取。那么至少你会知道问题是什么。


推荐阅读