У меня есть завод, как это:вычислить максимальное значение в массиве
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)
Как я могу решить это ?
См [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous -call) и [Почему моя переменная неизменна после изменения ее внутри функции?] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it -inside-оф-а-функции-Asynchron). Короткий ответ заключается в том, что вы не можете вернуть 'n' на основе' response'. Хотя, Угловая уже имеет одно из общих предложений - '$ q' обещает. –