Javascript AngularJS:$http承诺返回问题

Javascript AngularJS:$http承诺返回问题,javascript,angularjs,promise,angular-promise,Javascript,Angularjs,Promise,Angular Promise,我有以下代码。我试图做的是在服务中创建一个用户对象,然后将其传递给我需要的任何控制器,以防止我不得不在控制器中进行$http调用。我不是异步的大师,我很确定我使用这些承诺和$q对象是错误的。基本上,有两个工厂处理http调用和构建对象。注销时,它们似乎工作正常。转到服务,工厂被使用,在函数范围内,值被完美地注销,但是当我尝试将其返回到服务范围中的变量时,我得到了我需要的值,但它们仍然包装在promise对象中。我如何正确地返回和解析这些角度值,我在这里做错了什么 'use strict'; /*

我有以下代码。我试图做的是在服务中创建一个用户对象,然后将其传递给我需要的任何控制器,以防止我不得不在控制器中进行$http调用。我不是异步的大师,我很确定我使用这些承诺和$q对象是错误的。基本上,有两个工厂处理http调用和构建对象。注销时,它们似乎工作正常。转到服务,工厂被使用,在函数范围内,值被完美地注销,但是当我尝试将其返回到服务范围中的变量时,我得到了我需要的值,但它们仍然包装在promise对象中。我如何正确地返回和解析这些角度值,我在这里做错了什么

'use strict';
/*
*
*   @ngdoc function
*   @name beaverCreekPortalApp.factory:ApiService
*   @description
* 
* 
*/
angular.module('beaverCreekPortalApp').factory('ApiService', function($http) {

var ApiService = {
    async: function(object) {
        return $http.post(object.url, object.data);
    }
};
return ApiService;
});

/*
*
*   @ngdoc function
*   @name beaverCreekPortalApp.factory:APIfactory
*   @description
* 
* 
*/
angular.module( 'beaverCreekPortalApp' ).factory( 'APIfactory', function( $q, ApiService ){
var task = {
    userData : function( callback ){

        var User = {};

        var sessionData = {
            username : sessionStorage['BCResorts.username'] ? sessionStorage['BCResorts.username'] : null,
            access_token : sessionStorage['BCResorts.tok'] ? sessionStorage['BCResorts.tok'] : null,
            account_type : sessionStorage['BCResorts.accountType'] ? sessionStorage['BCResorts.accountType'] : null
        };

        this.userDetails = (function( callback, User ){
            var params = {
                url : '*************',
                data : {
                    username : sessionData.username,
                    access_token : sessionData.access_token
                }
            };

            var deferred = $q.defer();
            ApiService.async(params).then( function(response){                  
                if( response.data.users ){
                    $.each( response.data.users, function( i, v ){
                        if( v.access_token === sessionData.access_token && v.username === sessionData.username ){
                            $.extend( User, sessionData, v );
                            /*
                                this logs out the data I need exactly
                            */
                            console.log( User );
                            deferred.resolve( v );
                            callback( v );
                        }
                    });
                }
            });

        })( callback, User );
    }
}
});

/*
*
*   @ngdoc function
*   @name beaverCreekPortalApp.service:UserService
*   @description
* 
* 
*/
angular.module('beaverCreekPortalApp')
.service('UserService', [ '$q', 'APIfactory', function UserService( $q, APIfactory ) {

var deferred = $q.defer();
var _loadUser = function( _user ){
    APIfactory.userData( function( data ){
        deferred.resolve( data );
        console.log( data );
        /*
             this logs out the data I want exactly but I need it in the scope of the Service so I can pass it to other controllers
        */
    });
    return deferred.promise;
};

var User = _loadUser();
/*
    this logs out the data I want but it is still wrapped in a promise. d ( $$state : object )
    if I try to access the $$state propery, d.$$state, I get status : 1
    if I try to access the $$state.value propery, where the response is, I get undefined
*/
console.log( User );

return User;
}]);

您是否已经完成了ApiService.async(params).then()调用?如果是这样的话,您是否看到了您不希望看到的内容?我在您的代码中没有看到任何返回。。。我不太确定在没有实际兑现承诺的情况下,这些措施将如何发挥作用。您创建了一个延迟对象,然后再也没有返回它,从而使它变得无用。请避免。尤其是在
每个
循环中,它似乎都不起作用。您记录的是承诺,而不是承诺的结果。使用
promise.then(函数(res){console.log(res);})
您已经完成了ApiService.async(params).then()调用了吗?如果是这样的话,您是否看到了您不希望看到的内容?我在您的代码中没有看到任何返回。。。我不太确定在没有实际兑现承诺的情况下,这些措施将如何发挥作用。您创建了一个延迟对象,然后再也没有返回它,从而使它变得无用。请避免。尤其是在
每个
循环中,它似乎都不起作用。您记录的是承诺,而不是承诺的结果。使用
promise.then(函数(res){console.log(res);})