This question already has answers here:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference
(6个答案)
3年前关闭。
我有一个像这样的工厂:
该工厂将返回其中具有两个函数的对象,第二个函数将返回数组中的最大数目,在这种情况下为
在我的控制器中,我测试了该功能:
但我总是得到值
我试图像这样影响
我该如何解决?
在执行
(6个答案)
3年前关闭。
我有一个像这样的工厂:
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
对象。
您应该从方法getHighestNumberOfOffers
中返回一个Promise,将.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)
});
09-05 14:26