簡體   English   中英

從角度工廠返回數據,在返回對象后填充數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM