2016-03-21 9 views
0

Ich habe Probleme mit der Wiederholung von Daten aus einer Schleife (die nicht genau ist, sollten die Daten eindeutig sein). Ich glaube, dass das Problem auf eine schlechte Umsetzung/Verständnis von Versprechen zurückzuführen ist.Verwenden von Versprechen in Schleifen mit Winkel

var posts = PostsData.getPosts();  

$scope.$watch($scope.active, function() { 
    $timeout(function() { 
     var markers = []; 

     for (var key in posts) { 
      var post = posts[key]; 
      if (posts.hasOwnProperty(key) && posts[key]!=null) { 
       var p = $q.defer(); 
       p = gf.get(key).then(function(location) { 
        console.log(post.title) 

        return ({ 
         idKey: key, 
         title: post.title, 
         coords: { 
          latitude: location[0], 
          longitude: location[1] 
         } 
        }); 
       }); 
       markers.push(p); 

      } 
     } 

     $q.all(markers).then(function(markers) { 
      $scope.markers = markers; 
     }); 

    }); 
}) 

} 

$ scope.markers ist mit wiederholten post.title Daten gefüllt. Jede Hilfe würde sehr geschätzt werden. Ich bin neu im Programmieren, also entschuldige ich mich, wenn meine Probleme einfach erscheinen.

+0

Des '$ q.defer();' macht keinen Sinn, es machen. Sie sollten nur initialisieren mit 'var p = gf.get (...) .then (...)' – Bergi

+0

Wenn auch 'posts 'ein Array ist, sehen Sie sich [warum die Verwendung von' for ... in' auf Arrays ist so schlimm Idee] (https://stackoverflow.com/q/500504/1048572). Verwenden Sie stattdessen ['markers = posts.map (...)'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map), was auch Ihr anderes Problem löst . – Bergi

Antwort

0

Versuch zu ersetzen:

var p = $q.defer(); 
p = gf.get(key).then(function(location) { 
    ... 
}) 

mit p = gf.get(key);

+0

'.then' gibt ein Versprechen zurück, also' p' ist ein Versprechen. – jib

+0

@jib, 'p' ist kein Versprechen. 'p.promise' ist ein Versprechen und' .then' gibt nichts zurück. siehe https://docs.angularjs.org/api/ng/service/$q – olysachok

+0

'.nachdem wir ein Versprechen abgeben, machen wir Versprechensketten. – jib

Verwandte Themen