我的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);
}
}
});
谢谢!
答案 0 :(得分:1)
我会考虑查看$q.all
。它接受一系列承诺,并在所有承诺解决后解决。你将能够做到这样的事情:
$q.all([promise1, promise2, promise3]).then(function(values){
console.log(values[0]) // promise1 value
console.log(values[1]) // promise2 value
console.log(values[2]) // promise3 value
});
您需要做的就是将每个promise推送到一个数组中,然后返回$q.all(array)
。然后,您就可以在控制器中拨打then
并获得所有回复。
希望这会有所帮助