Angularjs 无法从控制器(角度)中的工厂接收数据

Angularjs 无法从控制器(角度)中的工厂接收数据,angularjs,controller,factory,Angularjs,Controller,Factory,为什么第二个console.log在第一个打印实际数据时给我未定义的信息?如何将承诺中收到的数据分配给任何变量,以便能够在没有承诺的情况下使用它 angular.module('dopasujApp') .controller('productLoader', [ '$scope','getProducts', function ($scope,getProducts) { $scope.recived = {}; cons

为什么第二个
console.log
在第一个打印实际数据时给我未定义的信息?如何将承诺中收到的数据分配给任何变量,以便能够在没有承诺的情况下使用它

angular.module('dopasujApp')
    .controller('productLoader', [ '$scope','getProducts',
        function ($scope,getProducts) {
            $scope.recived = {};
            console.log($scope.list);
            function getter() {
                return getProducts(1, 150, 20, 'ASC', 'PRODUCT_ID', 'a').then(function (recived) {
                        $scope.recived = recived;
                        console.log($scope.recived);
                    }
                );
            }

            getter();
            console.log($scope.recived);
        }
]);
这是我的工厂代码:

angular.module('dopasujApp').factory('getProducts', ['$http', function ($http) {
 return function(fit = 1, limit = 150, vendor = 20, sort = 'ASC', orderBy = 'PRODUCT_ID', search='a', size=[], filters={}, attribs=[]) {
     var getProduct = {}, recived = {}, APIurl;
     getProduct.data={};
     getProduct.data.sort=sort;
     getProduct.data.orderBy=orderBy;
     getProduct.data.search=search;
     getProduct.data.filters=filters;
     getProduct.data.filters.ATTRIBS=attribs;
     getProduct.data.filters.SIZE=size;
     recived.list= [];
     recived.count = 0;
     recived.filters = {};
     APIurl = "*******?action=getListing&fit="+fit+"&limit="+limit+"&vendor="+vendor;
     var request = $http({
         method: "POST",
         url: APIurl,
         headers: {
            'Content-Type': 'application/json'
         },
         data: {
            data:  getProduct.data
         }
     });

     var values = request.then(function (response){
         return {
             list: response.data.QUERY,
             count: response.data.COUNT,
             filters: response.data.FILTERS
         };
     });
     return values;
 }
 }]);

因为您的getProducts是一个承诺,即使是很难,您的第二个console.log也是在您的getter()之后;,console.log是在您的承诺得到解决之前执行的,这就是它未定义的原因。

因为您的getProducts是一个承诺,甚至您的第二个console.log也是在您的getter()之后执行的;,console.log是在您的承诺得到解决之前执行的,这就是它未定义的原因。

您可以共享您的服务代码吗?当然,我会编辑问题。您可以共享您的服务代码吗?当然,我会编辑问题。若要添加此项<代码>getter()。然后(function(){console.log($scope.recived);})将是进行第二次logOk的正确方法,但是如何获取实际数据呢?我的意思是,如何将实际接收的数据分配给
$scope.received
或任何其他变量,以便能够在没有承诺的情况下使用它?您已经在分配它了,不是吗?使用$scope.recived=recived;在承诺内?是的,承诺等待数据,console.log立即运行。你需要等待获得者。。。ie@charlietfl getter().then()是一个不错的选择。所以它打印未定义不是因为我做错了,而是因为我试图打印它时它还没有完成?呃,现在我明白了。。。所以实际上在工厂里使用promise并没有给我什么,对吗?除了这个<代码>getter()。然后(function(){console.log($scope.recived);})将是进行第二次logOk的正确方法,但是如何获取实际数据呢?我的意思是,如何将实际接收的数据分配给
$scope.received
或任何其他变量,以便能够在没有承诺的情况下使用它?您已经在分配它了,不是吗?使用$scope.recived=recived;在承诺内?是的,承诺等待数据,console.log立即运行。你需要等待获得者。。。ie@charlietfl getter().then()是一个不错的选择。所以它打印未定义不是因为我做错了,而是因为我试图打印它时它还没有完成?呃,现在我明白了。。。所以实际上在工厂里使用承诺对我来说什么都没有,对吗?