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