Angular 服务在回调函数中部分可用
Angular service partially available in a callback function
在我的 angular 简单应用程序中,我遇到一个工厂问题,该工厂在回调函数中不完全可用。
Here is a plnckr 带有简化版本的应用程序。
这是我的代码:
控制器:
function activate() {
return featureService.getBoards().then(callBackOk, callBackError);
function callBackOk(data) {
vm.boards = data;
};
function callBackError(error) {
console.log(error);
};
};
功能服务:
function getBoards() {
return connectionService.get(urls.featureUrl).then(callBack, callBackError);
function callBack(response) {
boards = {};
actuators = [];
response.data.forEach(function(feature){
formatFeature(feature);
storeFeature(feature);
});
return boards;
}
function callBackError(error) {
var deferred = $q.defer();
console.log(angular.toJson(loginService.issue));
console.log(angular.toJson(loginService.isOk));
console.log(angular.toJson(loginService.error));
console.log(angular.toJson(loginService));
loginService.issue("Unable to retrieve objects", error).then(function(){
deferred.resolve(getBoards());
}, function(error){
deferred.reject(error);
});
return deferred.promise;
}
}
控制台记录:
undefined features.services.js:71:1
undefined features.services.js:72:1
{"label":"","detail":{}} features.services.js:73:1
{"error":{"label":"","detail":{}},"graphicDefered":{}} features.services.js:74:1
Error: loginService.issue(...) is undefined
callBackError@http://localhost:8100/app/features/features.services.js:76:17
最后,从 loginService 返回的对象:
return {
'login' : login,
'logout' : logout,
'isOk' : function(){return ok;},
'issue' : issue,
'error' : error,
'graphicDefered' : graphicDefered
};
我假设 get
方法抛出一个异常,该异常将被 callBackError
函数拦截。我怀疑是延迟加载器,但我不知道如何修复它...
undefined features.services.js:71:1
undefined features.services.js:72:1
这两个 undefiends 是因为你在函数上调用 angluar.toJson。只需尝试 console.log(loginService.issue) 它就会打印出来。
仅功能问题 returns login(promise) if (detail.status === 403 || detail.status === 401) is true else it returns undefined你不能在未定义的情况下调用 then。
function issue(label, detail) {
error.label = label;
error.detail = detail;
if (detail.status === 403 || detail.status === 401) {
ok = false;
return login(account.mail, account.pwd);
}
}
在我的 angular 简单应用程序中,我遇到一个工厂问题,该工厂在回调函数中不完全可用。
Here is a plnckr 带有简化版本的应用程序。
这是我的代码:
控制器:
function activate() {
return featureService.getBoards().then(callBackOk, callBackError);
function callBackOk(data) {
vm.boards = data;
};
function callBackError(error) {
console.log(error);
};
};
功能服务:
function getBoards() {
return connectionService.get(urls.featureUrl).then(callBack, callBackError);
function callBack(response) {
boards = {};
actuators = [];
response.data.forEach(function(feature){
formatFeature(feature);
storeFeature(feature);
});
return boards;
}
function callBackError(error) {
var deferred = $q.defer();
console.log(angular.toJson(loginService.issue));
console.log(angular.toJson(loginService.isOk));
console.log(angular.toJson(loginService.error));
console.log(angular.toJson(loginService));
loginService.issue("Unable to retrieve objects", error).then(function(){
deferred.resolve(getBoards());
}, function(error){
deferred.reject(error);
});
return deferred.promise;
}
}
控制台记录:
undefined features.services.js:71:1
undefined features.services.js:72:1
{"label":"","detail":{}} features.services.js:73:1
{"error":{"label":"","detail":{}},"graphicDefered":{}} features.services.js:74:1
Error: loginService.issue(...) is undefined
callBackError@http://localhost:8100/app/features/features.services.js:76:17
最后,从 loginService 返回的对象:
return {
'login' : login,
'logout' : logout,
'isOk' : function(){return ok;},
'issue' : issue,
'error' : error,
'graphicDefered' : graphicDefered
};
我假设 get
方法抛出一个异常,该异常将被 callBackError
函数拦截。我怀疑是延迟加载器,但我不知道如何修复它...
undefined features.services.js:71:1
undefined features.services.js:72:1
这两个 undefiends 是因为你在函数上调用 angluar.toJson。只需尝试 console.log(loginService.issue) 它就会打印出来。
仅功能问题 returns login(promise) if (detail.status === 403 || detail.status === 401) is true else it returns undefined你不能在未定义的情况下调用 then。
function issue(label, detail) {
error.label = label;
error.detail = detail;
if (detail.status === 403 || detail.status === 401) {
ok = false;
return login(account.mail, account.pwd);
}
}