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

时间:2016-03-31 14:48:58

标签: javascript angularjs http promise

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

谢谢!

1 个答案:

答案 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并获得所有回复。

希望这会有所帮助