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

标签 javascript angularjs

$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/

相关文章:

angularjs - Angular Mocks 安装询问我依赖项

javascript - 新对象或新对象()

javascript - 单击jquery函数添加和删除div标签

javascript - expressjs 没有异步处理我的请求

javascript - AngularJS slider 数字绑定(bind)不起作用

javascript - Angularjs UI 选择 StartsWith 搜索

javascript - 如何在http.put请求中使用路径参数

angularjs - ng-click 和 ng-class 切换类

Javascript延迟事件

javascript - React 路由给出意外的 token 错误