从角度工厂返回数据,返回对象后填充数据

Returning data from an angular factory, data is populated after object is returned

本文关键字:数据 返回 对象 填充 工厂      更新时间:2023-10-08

我的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);
        }
    }
    });

谢谢!

我会考虑看看$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并获得所有响应。

希望这能帮助