我在一个控制器中有两个http GET,有时它可以工作,其中两个正在工作。有时只有一个http Get可以工作。有时没有显示。 有什么建议吗?
}).controller("nextSidorAdminCtrl",
function($scope,$rootScope,$http,$location,$state) {
$http.get("/ShiftWeb/rest/admin/getallsettingtime")
.then(function(response) {
$scope.settingtimes = response.data;
});
$http.get("/ShiftWeb/rest/admin/nextsidor")
.then(function(response) {
$scope.nextsidor = response.data;
});
图片:
答案 0 :(得分:0)
束缚两个$ http.get操作:
}).controller("nextSidorAdminCtrl",
function($scope,$rootScope,$http,$location,$state) {
$http.get("/ShiftWeb/rest/admin/getallsettingtime")
.then(function(response) {
$scope.settingtimes = response.data;
return $http.get("/ShiftWeb/rest/admin/nextsidor")
})
.then(function(response) {
$scope.nextsidor = response.data;
});
由于调用promise的.then
方法会返回新的派生promise,因此很容易创建promise的promise。可以创建任意长度的链,并且由于一个承诺可以用另一个承诺来解决(这将进一步推迟其解决方案),因此可以在链中的任何点处暂停/推迟对这些承诺的解决。
有关更多信息,请参见AngularJS $q Service API Reference - chaining promises
答案 1 :(得分:-1)
解决此问题的最佳方法是使用async
在我看来,georgeawg先生的答案是,如果 $http.get("/ShiftWeb/rest/admin/getallsettingtime")
返回success
,那么 $http.get("/ShiftWeb/rest/admin/nextsidor")
被称为,否则将不会被调用。
正如我在问题中看到的那样,两者都是独立的。
因此,您需要遵循异步或类似方法的最佳方法。
因此您的代码将是:
var getAllAettingTime = function(cb) {
$http.get("/ShiftWeb/rest/admin/getallsettingtime")
.then(function(response) {
if(response.data){
$scope.settingtimes = response.data;
return cb(null,'OK');
}else{
return cb(null,'ERROR');
})
}
var nextSidor= function(cb) {
$http.get("/ShiftWeb/rest/admin/nextsidor")
.then(function(response) {
if(response.data){
$scope.nextsidor = response.data;
return cb(null,'OK');
}else{
return cb(null,'ERROR');
})
}
async.series([ getAllAettingTime, nextSidor], function(err, result) {
if (err){
/* Do what you want if err comes */
} else {
/* Do what you want if both HTTP come with success */
}
});
在上面的 async.series()
中,两个HTTP都将被调用而彼此之间没有任何依赖关系。
为了更好地理解,您需要研究async npm module,并且必须将其安装在您的应用中。