2015-11-08 15 views
1

我正在從角度應用程序,它從API加載數據。Javascript的不穩定行爲 - 無法讀取未定義的屬性'經度'

一切工作正常,但在Chrome定期收到此錯誤CONSOLE.LOG

TypeError: Cannot read property 'longitude' of undefined

updateMapWaypoint error

這會導致一些後續的功能,功能障礙以及。該生產線的角度抱怨的,是以下

function updateMapWaypoint(lastposition) { 
     console.log("updateMapWaypoint(%s) called", lastposition); 
     console.log($scope.units[$scope.selectedUnitIndex]); 
     var longitude = (lastposition) ? $scope.units[$scope.selectedUnitIndex].lastposition.gps.longitude : $scope.unsortedPositions[$scope.selectedPositionIndex].gps.longitude; 

凡兩個第一的調試,最後一個,造成麻煩就行了。據我可以從控制檯中的printet對象看到。 Javascript應該沒有問題找到對象的經度,但它會拋出錯誤,我找不到任何方法來解決它。

所有幫助表示讚賞,如果需要更多的細節,我會盡可能爲我提供。

+0

不管出於何種原因,錯誤意味着其中一個'lastposition'對象沒有「gps」屬性,或者它的值是'undefined'。 – Pointy

+1

更好的方法來解決這個問題,將你的#314行分成多行,如果有其他行和多行。你可以得到哪一行,哪個對象是未定義的。 –

+0

由於'gps'出現在控制檯中,我的猜測是你正在發出一個AJAX請求來獲取數據,但是在你嘗試使用響應之前請求還沒有返回。控制檯不會及時提供快照。它提供了對象的實時視圖。 – 2015-11-08 15:00:34

回答

1

看起來這可能是一種競爭條件。

console.log()會告訴你的對象,因爲它是現在什麼是當你叫console.log()。要查看對象的屬性,在某個時間certian點,你必須複製的內容,並將它們發送到console.log(),例如通過字符串化它:

console.log(JSON.stringify(myObject)) 

或者,如果您使用的角度:

console.log(angular.extend({}, myObject)); 

這是令人困惑的(它已經和我混淆了幾次)。請記住,您發送的是console.log()對象參考,而不是對象的副本。

+0

如上所述,似乎你是完全正確的,在意識到這一點之後,我認爲我發現了我的邏輯中的缺陷。 –

+1

作爲一個簡單的說明,也可以使用console.log(angular.extend({},myObject))如果遍歷對象是期望的 –

相關問題