繁体   English   中英

Firebug的console.log:调试异步变量

[英]Firebug's console.log: debugging asynchronous variables

我正在尝试调试一些JavaScript代码。 我要调试的变量是对象的JS对象,异步加载(ajax回调)。 我正在回调之外调试它。

我很确定这个问题是一个竞争状况问题,但是我想确定(这不是我的问题 )。

我在调试时发现的问题是console.log为我提供了一条信息,该信息与代码在做什么无关。 因此,我丢失了代码中的某些内容,或者在控制台中看到的结果不是运行console.log时变量状态的快照。

如果事实证明是后来的, 我如何获取异步加载的JS对象状态的快照


这是代码的简化示例

//This call takes a while to invoke the callback
$.get("url",function(data){
    //Process data
    globalVariable = data; //JSON (Object of objects)
}

//Couple lines afterwards
/* This console.log shows (in Firebug's console) "Object { }" and when I click it,
   I can see the object with all its fields filled (oher objects) 
*/
console.log(globalVariable); 
for(var e in globalVariable){
     //Does not enter here, meaning that the object is empty
}

console.log本身是异步的,有时显示引用而不是快照。

如果您记录一个对象,您将获得一个漂亮的可单击界面,您可以在其中检查该对象。 如果对象发生更改,您将在此处看到这些更改。

如果想要真实的快照,则必须进行一些序列化,而序列化对象并非易事。 如果您的对象只是数据而没有函数或引用,则可以使用JSON.stringify(obj, undefined "\\t")

一种更聪明的方法是暂停异步事件,以便您可以检查对象的最新状态。

这样写吧。 这样,globalVariable在执行操作之前将拥有数据。

$.get("url",function(data){
    //Process data
    globalVariable = data; //JSON (Object of objects)

    for(var e in globalVariable){
        //this will run
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM