我對Angular工廠有點麻煩。它正確地返回數據 但在Chrome控制檯中,當我嘗試記錄它時,它最初爲空,而且chrome在我的對象旁邊顯示一條消息 - object value at left was snapshotted when logged
。當我展開我的對象時,一切都在那裏。如果我試圖循環返回的數據,我得到一個未定義的錯誤。從角廠返回數據後,返回對象後會填充數據
我很確定這是承諾領土,但我不知道我會如何去做。我只是希望能夠循環處理在我的控制器中從這個工廠返回的數據。我的代碼如下,任何見解將不勝感激。
angular.module('myMap').factory('mapSorter', function($http) {
x2js = new X2JS(),
data = {
styles: [],
layers: []
};
return {
//pass in array of objects with url property
processMapData : function(kmls) {
//loop through each object
angular.forEach(kmls, function(kml) {
$http.get(kml.url).then(function(response) {
//push properties from response into data object
data.styles = data.styles.concat(x2js.xml_str2json(response.data).kml.Document.Style)
data.layers.push(x2js.xml_str2json(response.data).kml.Document.Placemark)
})
})
return(data);
}
}
});
謝謝!
你在哪裏console.log'在你的數據? $ http.get請求是異步的,所以您必須等待數據到達後才能返回,並將其打印到控制檯中 –
感謝您的回覆。我在我的控制器中執行此操作: 'mapData = mapSorter.processMapData($ scope.kmlLayers); console.log(mapData)' 其中($ scope.kmlLayers)是我傳入processMapData函數的對象。 –
我想我只需要一種方法來確定何時返回所有數據,無論是從工廠返回還是從控制器收到對象之後。 –