2016-06-24 13 views
1

Ich habe das folgende Layout für ein Versprechen Kette in einem Service ...

this.getData = function(params) { 
    var promise = $http({}).then(function(firstdata) { 

     // work on the first data and then call a number of promises for fetch additional data 
     var promises = list.map(function(item) { 
     return $http({}).then(function(result2) { 
      // this is an amalgamation of all the data from the various calls 
      return finalData; 
     }); 
     return $q.all(promises); 
     }) 
    }); 
    return promise; 
    } 

Da ist in meinem Controller ich bin

tun
myService.getData().then(function(data){ 
}); 

Die Problem liegt in der Tatsache, dass THEN im Controller ausgeführt wird, bevor PROMISES (beachten Sie den Plural) einen Wert zurückgegeben hat.

Dies ist wahrscheinlich etwas albern, aber irgendwelche Gedanken darüber, wie dies zu vereinfachen/es funktioniert, wäre praktisch!

+0

Warum haben Sie zwei Versprechen aus den '.map' Callbacks zurückgegeben (1. stammt von' $ http' Aufruf und zweitens von '$ q.all')? –

+0

Weil sie nacheinander ausführen müssen? –

+0

Also ersten Anruf machen-> eine Reihe anderer generieren-> die Daten aus dem ersten und zweiten Anruf zusammen-> Rückmeldedaten –

Antwort

3

Derzeit wird Ihre innere promises ($ q.all Versprechen) nicht von Versprechen Variable zurückgegeben. Sie sollten auch promises (Plural) zurückgeben, um sicherzustellen, dass die Kette funktioniert.

this.getData = function(params) { 
    var promise = $http({}).then(function(firstdata) { 

     // creating new promise array in `promises` function 
     var promises = list.map(function(item) { 
      return $http({}).then(function(result2) { 
       // this is an amalgamation of all the data from the various calls 
       return finalData; 
      }); 
      return $q.all(promises); 
     }); 
     return promises; //returning inner promise 
    }); 
    return promise; 
} 
+0

Ohh Schatz, lass mich das testen, es ist eine riesige Funktion und das würde Sinn machen, ich habe gerade einen verpasst .. –

Verwandte Themen