gpt4 book ai didi

javascript - 调用服务返回未定义

转载 作者:行者123 更新时间:2023-11-30 11:54:20 25 4
gpt4 key购买 nike

我正在创建一个名为 ActiveUserProfileService 的服务,但是当我在 Controller 中调用它的函数时,我得到了 undefined 并且我无法弄清楚为什么。最奇怪的是,在 ActiveUserProfileService 服务中,来自 UserService 的信息是通过 console.log 显示的,所以我正在接收信息,但是在调用 code>ActiveUserProfileService 在 Controller 中,它给我 undifened。似乎数据没有传递。有人可以帮助我吗?

用户服务.js:

(function () {
'use strict';

angular
.module('myApp')
.factory('UserService', UserService);

UserService.$inject = ['$http'];

/* @ngInject */
function UserService($http) {
var service = {
getAuthenticatedUser: getAuthenticatedUser,
getUserInformation: getUserInformation

};
return service;

function getUserInformation(idUser) {
return $http.post('api/user/details', {idUser: idUser});
}
function getAuthenticatedUser() {
return $http.get('api/user');
}

}

})();

ActiveUserProfileService.js

(function () {
'use strict';

angular
.module('myApp')
.factory('ActiveUserProfileService', ActiveUserProfileService);

ActiveUserProfileService.$inject = ['$http','UserService'];

/* @ngInject */
function ActiveUserProfileService($http, UserService) {


var service = {
isAccount: isAccount
};
return service;

////////////////

function isAccount(accountName) {
UserService.getAuthenticatedUser()
.then(function (response) {
var data = response.data;

UserService.getUserInformation(data.user.id)
.then(function (response) {
var userDetails = response.data;
console.log("It is");
console.log(accountName == userDetails.account_types[0].description_internal);

return accountName == userDetails.account_types[0].description_internal;
});
})
}

}

})();

我的 Controller :

(function () {
'use strict';

angular
.module('myApp')
.controller('WizardController', WizardController);

WizardController.$inject = [
'UserService',

'ActiveUserProfileService'

];

/* @ngInject */
function WizardController(UserService,ActiveUserProfileService) {

var vm = this;


console.log("ActiveUserProfileService");
console.log(ActiveUserProfileService.isAccount("professional")); //is Returning me undefined



}

})
();

最佳答案

重点是,您正试图在另一个回调函数中为 isAccount 返回一个值。当您这样做时,您将向此函数返回一个值,而不是 isAccount 本身,因此 isAccount 将不会返回任何未定义的内容。由于您正在调用异步方法,因此 isAccount 也必须是异步的,

替换

 function isAccount(accountName) {
UserService.getAuthenticatedUser()
.then(function (response) {
var data = response.data;

UserService.getUserInformation(data.user.id)
.then(function (response) {
var userDetails = response.data;
console.log("It is");
console.log(accountName == userDetails.account_types[0].description_internal);

return accountName == userDetails.account_types[0].description_internal;
});
})
}

 function isAccount(accountName) {
var deferred = $q.defer();
UserService.getAuthenticatedUser()
.then(function (response) {
var data = response.data;
//when the user is loaded, then you resolve the promise you has already returned
UserService.getUserInformation(data.user.id)
.then(function (response) {
var userDetails = response.data;
console.log("It is");
console.log(accountName == userDetails.account_types[0].description_internal);
deferred.resolve(accountName == userDetails.account_types[0].description_internal);
return; //here is not isAccount return, but anonymous inner function 'function (response)', you got it?
});
});
return deferred.promise; //return as soon as creates the promise
}

当然你也必须注入(inject) $q 服务

关于javascript - 调用服务返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38484098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com