计算数组中的最大值

calculate the maximum value in an array

本文关键字:最大值 数组 计算      更新时间:2023-09-26

我有一个这样的工厂:

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());

但我总是得到值CCD_ 2。

我试图影响n变量的一些数字,如下所示:n = 12;,但我总是得到值0,似乎n变量的值在$http.get('data/offres_par_pays.JSON').then(function(response) 内没有改变

我该如何解决这个问题?

不能期望asynchronous调用同步工作。因为你永远不可能知道它什么时候会完成。

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

代码

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放在getHighestNumberOfOffers服务方法的.then函数中。

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