[英]Returning data from an angular factory, data is populated after object is returned
我的Angular工廠遇到了一些麻煩。 它可以正確返回數據,但是在chrome控制台中,當我嘗試記錄該數據時,它最初是空的,並且chrome在我的object value at left was snapshotted when logged
object- object value at left was snapshotted when logged
旁邊顯示了一條消息, 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);
}
}
});
謝謝!
我會考慮看看$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
你的控制器內,並讓所有的回應。
希望這會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.