[英]Angular 1.2 $q breaks when returning $q.promise several times (different conditions) within same function
$scope.model.initJobs = function(forceLoad){
var deferred = $q.defer();
var companyId = authService.getCompanyId();
if(!Boolean(companyId) || companyId == 'undefined'){//no data was loaded yet - bummer
deferred.resolve([]);
return deferred.promise;
}
var jobs = jobsService.getJobs(companyId);
if(jobs && !forceLoad){
deferred.resolve(jobs);
return deferred.promise;
}
$scope.__loading = true;
jobsService.getCompanyJobs(companyId).then(function(data){
$scope.__loading = false;
jobsService.setJobs(data.data, companyId);
deferred.resolve(data.data);
},
function(errorData){
$scope.__loading = false;
$location.path('/notfound');
jobsService.setJobs([], companyId)//those line are a precuation
deferred.resolve(data.data);
});
return deferred.promise;
}
$scope.model.initJobs(true).then(function(data){
$scope.model.jobs = data;
});
The following freezes the screen with Angular 1.2.0 and 1.2.1, is it because I am returning the defrred.promise on several occasions within the same function?. 以下内容冻结了Angular 1.2.0和1.2.1的屏幕,是因为我在同一函数中多次返回了defrred.promise吗? The idea here is not to load the data again if I already have it stored within my service. 这里的想法是,如果我已经将数据存储在服务中,则不要再次加载数据。
Any thoughts?. 有什么想法吗?。 Any help is appreciated & welcome. 任何帮助表示赞赏和欢迎。
EDIT: I should perhaps mention that ht above works perfectly fine on AngularJS 1.0.8! 编辑:我也许应该提一下,以上ht在AngularJS 1.0.8上可以很好地工作!
You are making it way harder than it needs to be, generally you never need deferreds. 您正在使它变得比所需的更加困难,通常您不需要延期。
$scope.model.initJobs = function (forceLoad) {
var companyId = authService.getCompanyId();
if (!Boolean(companyId) || companyId == 'undefined') { //no data was loaded yet - bummer
return $q.resolve([]);
}
var jobs = jobsService.getJobs(companyId);
if (jobs && !forceLoad) {
return $q.resolve(jobs);
}
$scope.__loading = true;
return jobsService.getCompanyJobs(companyId)
.then(function (data) {
jobsService.setJobs(data.data, companyId);
return data.data;
})
.catch(function (errorData) {
$location.path('/notfound');
jobsService.setJobs([], companyId) //those line are a precuation
//You seem not have tested because this won't work
return data.data;
})
.finally(function() {
$scope.__loading = false;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.