Angularjs - 无法读取未定义的属性'then'

时间:2017-08-27 14:49:37

标签: angularjs angular-promise angularjs-http

我是angularjs的新手,我知道有很多关于这个错误的问题, 不幸的是,我找不到适合我的问题的答案。

我有一个拥有所有功能的工厂,以及使用它们的控制器。在一个控制器中,我得到了一个GET函数,它返回一个数组,我的大多数函数写得几乎相同,以及与这个函数完全相同的函数,只有不同的变量名/ url,但是这个错误只发生在这个功能:

控制器:

$scope.getAllFunction = function(){
         appServicesProvider.getAll($scope.var1).then(function(res){
             $scope.var2 = res;
         })
     };

Factory(appServicesProvider):

   function getAll(var1){
            $http.get(restURL+var1).then(
                    function(response){
                        return [].concat(response.data.var2)
                    }
            );
        }

正如我所说,有更多的功能写得完全相同,只有这个功能不起作用,这使我更难解决。 感谢给予的任何帮助!

1 个答案:

答案 0 :(得分:1)

您必须退回承诺

  function getAll(var1){
           return $http.get(restURL+var1).then(
                    function(response){
                        return [].concat(response.data.var2)
                    }
            );
        }

<小时/> 或者,您可以使用$q

重写工厂以返回包含已解决承诺的对象
app.factory('appServicesProvider', function() {
    return {
        getAll: function(var1) {
            var defer = $q.defer();
            $http.get(restURL + var1).then(function(response) {
                defer.resolve([].concat(response.data.var2));
            }).catch(function(response, status) {
                defer.reject(response.data.message);
            });
            return defer.promise;;
        }
    }
});