在工厂内承诺,在承诺完成之前返回

时间:2016-04-01 08:58:56

标签: javascript angularjs

我有一个工厂areaFactory,在里面我有这个:

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;

        });
    }
}

当我从控制器$scope.areas = AreaFactory.GetAreas(key);调用$scope.areas变得未定义时,我认为这是因为我的工厂在我的承诺完成之前返回undefined

在返回区域列表之前,如何让工厂等到承诺完成?

2 个答案:

答案 0 :(得分:2)

从工厂方法返回承诺:

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

然后在控制器中:

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

答案 1 :(得分:0)

当您返回承诺时,请确保您在控制器中处理错误情况。 例如:

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