$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;
});
下凍結與角1.2.0和1.2.1的屏幕,是不是因爲我返回defrred。在相同的功能內多次承諾? 這裏的想法是不加載數據,如果我已經存儲在我的服務。
有什麼想法? 任何幫助表示讚賞&歡迎。
編輯: 我也許應該提一下,上面的ht在AngularJS 1.0.8上工作得很好!
邏輯沒有意義。如果沒有數據加載,則解析'deffered'並立即返回'promise' ....否則不會發生。顯示'authService.getCompanyId()'的代碼' – charlietfl
您可能想'拒絕'錯誤'函數中的承諾,而不是解決它。但是,這不會導致凍結屏幕。控制檯上是否有錯誤?您使用哪個瀏覽器/平臺? –
我個人認爲你想要各種服務來解決他們自己的承諾,當這些解決方案解決'initJobs'時。很難說沒有更多的代碼...演示會幫助 – charlietfl