我对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函数的对象。 –
我想我只需要一种方法来确定何时返回所有数据,无论是从工厂返回还是从控制器收到对象之后。 –