2017-04-01 10 views
1

Im Versuch, die $ q.defer, $ q.all und Versprechungen, um eine Liste von http zu warten, um zu verwenden, fordert

ich diesen Code verwendet die $ q zu nennen. Alle

Diese Funktion wird nie aufgerufen, obwohl ich überprüft und die $ http.get für alle Werte aufgerufen wird.

  var deferred = $q.defer(); 
      $http.get(requestUrl). 
      then(function (data) { 
       var p = { 
        data: data, 
        name: name 
       }; 
       pData.push(p); 
       deferred.resolve(p); 
       return p; 
      }) 
      .catch(function (status) { 
       deferred.reject(status); 
      }); 

      promisesList.push(deferred.promise); 

Im Druck auf DoStep2 die Länge pData und auch die pData mit console.log und ich bekommen, was die Länge von 0 und sah aus wie 0 Objekte, aber wenn ich es öffnen sieht es aus wie alle Objekte werden innerhalb des $ http.get-Aufrufs für jeden spezifischen Aufruf initialisiert, der mich sicherstellt, dass die $ http.get-Antwort empfangen wurde und es eine gültige Antwort ist.

Auch das $ all wird überhaupt nicht genannt, was könnte falsch sein?

Vielen Dank für Ihre Unterstützung

+0

Eine Möglichkeit ist, dass Sie keine Erfolgsantworten für jede Anfrage erhalten. Wenn Sie eine Antwort von 400 haben, gilt dies als Ablehnung von '$ http.get'. Ein anderer Fehler ist ein Laufzeitfehler in der '.then()' (Ich kann 'pData' nicht erkennen, daher kann' .push' fehlschlagen. –

+2

Bitte geben Sie eine [mcve] an. Auch sollte $ nicht verwendet werden qdefer() 'da' $ http' selbst ein Versprechen zurückgibt – charlietfl

+1

Andere Probleme: Sie drücken auf 'promentsList', rufen aber' .all' auf 'promises' auf. Persönlich minimiere ich die Verwendung von' $ q.defer() ' - Das Ergebnis von '$ http.get' ist sowieso ein Versprechen, also können Sie das direkt tun. –

Antwort

1

OK Managed es zu reparieren I Servicefunktion getService() verwendet und diese Funktion zurück das Versprechen dann in jedem Aufruf i die getService() Versprechen an die promisesList ich diese Liste zurück hinzugefügt wartete auf die Verwendung von $ alle und es hat funktioniert vielen Dank für Ihre Hilfe.