簡體   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