[英]Firebug's console.log prints unexpected value using javaScript
[英]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.