我在调用服务功能时面临回调问题
这是我在registrationService
function hasUserAccessToLevel(incentiveLevel, callback, showRegistrationView) {
var url = "...";
httpWrapperService.get(url)
.then(
function success(data) {
var hasAccess = incentiveLevel <= data.Level;
callback(hasAccess);
if (showRegistrationView && hasAccess == false) {
showRegistrationViewForLevel(incentiveLevel);
}
},
function error(errorObject) {
alert("User has not access\r\nTODO : show popup for registration/login");
}
);
return false;
}
并在我的指令中我将此函数用作
function checkAuthentication() {
registrationService.hasUserAccessToLevel(2, function (hasAccess) {
if (hasAccess == false){
return false;
}
else{
return true;
}
});
}
function loadDocuments() {
var target=checkAuthentication()
if(target)
{
//load both private and public
}
else
{
// load only public
}
}
现在我面临的问题是,我有另一个函数loaDocuments
,当用户登录时它应该进入if(target)
块,但是当我调试函数时,它表示目标是未定义的因此控制权将转向其他部分,这是错误的。我知道有一些回调问题,但不知道如何纠正它。
任何帮助都是适合的。 感谢
答案 0 :(得分:0)
您应使用$q服务。 checkAuthentication()
返回undefined
因为hasUserAccessToLevel()
是异步的,并且在通话时没有返回值。解决方案是返回promise
对象。
您的代码可以这样写:
function checkAuthentication() {
var defer = $q.defer();
registrationService.hasUserAccessToLevel(2, function (hasAccess) {
defer.resolve(hasAccess);
}, function () {
defer.reject();
});
return defer.promise;
}
function loadDocuments() {
checkAuthentication().then(function (target) {
if (target) {
//load both private and public
}
else {
// load only public
}
});
}