Javascript 将一个功能转换为两个不同的功能

Javascript 将一个功能转换为两个不同的功能,javascript,angularjs,Javascript,Angularjs,我在一个有很多行的服务中有一个函数,我想把这个函数转换成两个不同的函数 这就是函数 angular.module('capilleira.clickAndGambleMobile.services') .factory('SportsFactory', function($http, $q, AuthFactory, LocalForageFactory, LeaguesFactory, CONSTANT_VARS) { return { getSports: funct

我在一个有很多行的服务中有一个函数,我想把这个函数转换成两个不同的函数

这就是函数

angular.module('capilleira.clickAndGambleMobile.services')
  .factory('SportsFactory', function($http, $q, AuthFactory, LocalForageFactory, LeaguesFactory, CONSTANT_VARS) {
    return {
      getSports: function(customer) {
        var defer = $q.defer(),
        _this = this;
    LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS)
      .then(function(sports) {
        if (!_.isNull(sports)) {
          defer.resolve(sports);
        }else {
          $http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + customer.agent)
            .success(function(sports) {
              sports = _.sortBy(sports, function(sport) {
                return sport.priority;
              });

              //THIS THE PART THAT I WANT TO MOVE FROM HERE

              _this.getSportChecked(customer).then(function(sportChecked) {
                var sportIds = _.pluck(sports, 'id'),
                    intersectedSports = _.intersection(sportIds, sportChecked.sport);
                if (sports.length) {
                  sports = _.map(sports, function(sport) {
                    sport.checked = !_.includes(intersectedSports, sport.id);
                    return sport;
                  });
                }else {
                  AuthFactory.logout();
                }
              });
              LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
              defer.resolve(sports);
            })
            .error(function(err) {
              defer.reject(err);
            });
        }
      });
    return defer.promise;
  }
});
这是我到目前为止得到的,但我收到一个错误,体育运动没有定义


那么,我在这里遗漏了什么呢?

体育在intersectedSportsChecked中不存在。它超出范围,我如何声明它?我做过体育运动;但仍然会出现同样的错误@elclanrs这是一样的,运动没有定义。您必须调用getSports并链接另一个承诺,并在回调中访问sports。@elclanrs您能帮我编写一段代码吗?另外,从LocalForageFactory中检索是否有可能返回未定义的?如果不为空,则表示正在解析运动。
  getSports: function(customer) {
    var defer = $q.defer(),
    _this = this;

    LocalForageFactory.retrieve(CONSTANT_VARS.LOCALFORAGE_SPORTS)
      .then(function(sports) {
        if (!_.isNull(sports)) {
          defer.resolve(sports);
        }else {
          $http.get(CONSTANT_VARS.BACKEND_URL + '/lines/sports/' + customer.agent)
            .success(function(sports) {
              sports = _.sortBy(sports, function(sport) {
                return sport.priority;
              });
              // HERE I AM CALLING THE NEW FUNCTION
              _this.intersectedSportsChecked(customer);

              LocalForageFactory.set(CONSTANT_VARS.LOCALFORAGE_SPORTS, sports);
              defer.resolve(sports);
            })
            .error(function(err) {
              defer.reject(err);
            });
        }
      });
    return defer.promise;
  },

  // HERE IS THE NEW FUNCTION
  // UPDATED

  intersectedSportsChecked: function(customer) {
    var _this = this,
        defer = $q.defer(),
        rejection = function(err) {
          defer.reject(err);
        };

    _this.getSports(customer).then(function(sports) {
      _this.getSportChecked(customer).then(function(sportChecked) {
        var sportIds = _.pluck(sports, 'id'),
            intersectedSports = _.intersection(sportIds, sportChecked.sport);
        if (sports.length) {
          sports = _.map(sports, function(sport) {
            sport.checked = !_.includes(intersectedSports, sport.id);
            return sport;
          });
        }else {
          AuthFactory.logout();
        }
      });
    }, rejection);
  },