2016-04-01 12 views
2

ich eine Fabrik, areaFactory und im Inneren Ich habe dies:Versprechen innerhalb der Fabrik, Rückkehr vor Versprechen erfolgt

return { 
    GetAreas : function(depKey){ 
     var areaPromise = AppService.getArea(depKey); 
     areaPromise.then(function (Obj){ 
      var areas = Obj['rows']; 
      var areaList = []; 

      angular.forEach(areas, function(obj){ 
       areaList.push({ 
        id: obj[0], 
        name: obj[1] 
       }); 
      }); 

      return areaList; 

     }); 
    } 
} 

Wenn ich $scope.areas = AreaFactory.GetAreas(key); von einem Controller nennen $scope.areas undefiniert wird, und ich dachte, es ist, weil mein Fabrik gibt undefined zurück, bevor mein Versprechen gemacht wird.

Wie kann ich die Fabrik warten lassen, bis das Versprechen gemacht wird, bevor es die Liste der Bereiche zurückgibt?

Antwort

2

Return das Versprechen von der Factory-Methode:

GetAreas : function(depKey){ 
     var areaPromise = AppService.getArea(depKey); 
     return areaPromise.then(function (Obj){ 
       .... 
     }); 
} 

Und dann in der Steuerung:

AreaFactory.GetAreas(key).then(function(list){ 
    $scope.areas = list; 
}); 
+0

Danke für die schnelle, praktikable Lösung! Jetzt kann ich glücklich zum Mittagessen gehen, ich werde akzeptieren, wenn ich zurückkomme (7min bis ich annehmen kann, wegen 10min Regel) – klskl

0

Wenn Sie das Versprechen zurückzukehren, stellen Sie sicher, dass Sie Fehlerfälle in Ihrem Controller behandeln. Zum Beispiel:

AreaFactory.GetAreas(key).then(
    function(list){ 
    $scope.areas = list; 
    }, 
    function(error) { 
    //handle error here 
    } 
); 
Verwandte Themen