我有一个像这样的工厂:
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)
我该如何解决?
您不能期望asynchronous
呼叫能够同步工作。因为您永远都不知道何时完成。
为了控制它,您会告诉您async
呼叫已完成或失败,这就是承诺。基本上$http.get
有返回promise
对象。您应该从方法中返回一个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
放在service方法的.then
函数中getHighestNumberOfOffers
。
JobOffersByCounteryFactory.getHighestNumberOfOffers().then(function(n){
console.log(n)
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句