为什么不承诺在服务中解决?

时间:2016-09-23 16:41:55

标签: angularjs angular-promise

我有一个工厂NewEditSvc,我正在尝试分享NewCtrlEditCtrl的共同功能。我要做的一件事是从服务内部的服务器获取feeParameters,但这不起作用。

angular.module('feeSuitesApp')
.factory('NewEditSvc', function($q, FeeTypesSvc){
  var _feeParameters = {};

  function getParameters(){
    return _feeParameters;
  }

  function setParameters(feeType){
    var promise = $q(function(resolve, reject){
      FeeTypesSvc.resource.get({id: feeType.id, association: 'fee_parameters'}).
      $promise.then(function(data){
        resolve(data);
      }, function(error){
        reject(error);
      })
    });

    promise.then(function(data){
      _feeParameters = data.master;
    });
  }

  return {
    getParameters: getParameters,
    setParameters: setParameters
  }
});

angular.module('feeSuitesApp')
.controller('NewCtrl', function(NewEditSvc, feeType){
  $scope.feeParameters = NewEditSvc.getParameters();
  $scope.feeType = feeType;
  $scope.setParameters = function(feeType){
    NewEditSvc.setParameters(feeType);
  };
  $scope.setParameters($scope.feeType);
});

在我的最后一行$scope.feeParameters未设置之后。但是,如果我从NewEditSvc.setParameters()返回promise变量,然后在我的NewCtrl中,我会执行以下操作:

  var promise = $scope.setParameters($scope.feeType);

  promise.then(function(data){
    $scope.feeParameters = data.master;
  });

然后一切正常。我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题是,你没有在setParameters中返回你的诺言。 https://docs.angularjs.org/api/ng/service/ $ Q /

只需添加return promise