2013-11-24 40 views
1
$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上工作得很好!

+0

邏輯沒有意義。如果沒有數據加載,則解析'deffered'並立即返回'promise' ....否則不會發生。顯示'authService.getCompanyId()'的代碼' – charlietfl

+0

您可能想'拒絕'錯誤'函數中的承諾,而不是解決它。但是,這不會導致凍結屏幕。控制檯上是否有錯誤?您使用哪個瀏覽器/平臺? –

+0

我個人認爲你想要各種服務來解決他們自己的承諾,當這些解決方案解決'initJobs'時。很難說沒有更多的代碼...演示會幫助 – charlietfl

回答

2

你正在讓它變得比它需要的更難,通常你永遠不需要延期。

$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; 
    }); 
} 
+0

我會嘗試此代碼以及最新的Angular製作版本,並會繼續發佈。 非常感謝:) –

+0

沒有幫助不幸,雖然拋出了一堆錯誤:(。 至於我的問題的起源,我仍然無能爲力。 –

+0

@OlegTikhonov我不明白 - 讀錯誤並修復它們... – Esailija