计算数组中的最大值

时间:2015-12-26 19:33:46

标签: javascript angularjs

我有这样的工厂:

myapp.factory('JobOffersByCounteryFactory', function($http) {
    var factory = {
        getList: function() {
            return $http.get('data/offres_par_pays.JSON')
                .then(function(response) {
//....code

                }, function(error) {
                    return 'There was an error getting data';
                });
        },
        getHighestNumberOfOffers: function() {
            var n = 0;
            $http.get('data/offres_par_pays.JSON')
                .then(function(response) {
                    n = Math.max.apply(Math, response.data['nb']);
                }, function(error) {
                    return 'There was an error getting data';
                });
            return n;
        }
    };
    return factory;
});

这个工厂将返回一个包含两个函数的对象,第二个函数将返回一个数组中的最大数字,在这种情况下response.data['nb']

在我的控制器中,我测试了这个功能:

console.log(JobOffersByCounteryFactory.getHighestNumberOfOffers());

但我总是得到值0

我试图将n变量的某些数字影响为:n = 12;但我总是得到值0似乎n的值变量在$http.get('data/offres_par_pays.JSON').then(function(response)

内没有变化

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您不能期望asynchronous来电同步工作。因为你永远不知道什么时候会完成。

为了控制它,你会告诉async来电已经完成或失败,这就是承诺。基本上$http.get返回promise个对象。 您应该从方法getHighestNumberOfOffers返回一个承诺,在其上放置.then函数,该函数将成功并在其中进行错误回调。  &安培;在承诺成功时,您需要返回新计算的变量值。

<强>代码

getHighestNumberOfOffers: function() {
  var n = 0;
  return $http.get('data/offres_par_pays.JSON')
    .then(function(response) {
    n = Math.max.apply(Math, response.data['nb']);
    return n;
  }, function(error) {
    return 'There was an error getting data';
  });
}

在执行console.log(JobOffersByCounteryFactory.getHighestNumberOfOffers())时,您只会获得getHighestNumberOfOffers返回的promise对象(根据上述建议)。为了获得准确的值,您应该将console.log放在.then服务方法的getHighestNumberOfOffers函数中。

JobOffersByCounteryFactory.getHighestNumberOfOffers().then(function(n){
   console.log(n)
});