简体   繁体   English

在同一函数中多次返回$ q.promise(不同条件)时,Angular 1.2 $ q中断

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM