$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;
});
以下使用 Angular 1.2.0 和 1.2.1 卡住屏幕,是因为我在同一个函数中多次返回 defrred.promise 吗? 如果我已经将数据存储在我的服务中,这里的想法是不要再次加载数据。
有什么想法吗? 感谢并欢迎任何帮助。
编辑: 我或许应该提到上面的 ht 在 AngularJS 1.0.8 上工作得很好!
最佳答案
你让它变得比它需要的更难,通常你永远不需要 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;
});
}
关于javascript - Angular 1.2 $q 在同一函数中多次返回 $q.promise(不同条件)时中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20176575/