我正面临一个问题。我有angularjs函数,它反过来调用另一个有post请求的angularjs函数。当第一个函数结束时,这个帖子请求总是在最后触发..它不会被触发。
servicePOST.send(appConstants.BASE_MS_URL + 'Dcrs/activityDay.php',{
"date":d
}).then(function(result) {
console.log(result);
});
请有人向我解释这个行为..对此的任何解决方法...我想顺序执行所有http请求。我是否实现了这个代码?提前谢谢!
答案 0 :(得分:0)
根据您的问题我理解,您有一个页面,其中一个部分依赖于其他部分,依此类推。并且所有这些部分都由不同的2 http请求提供/呈现。
在这种情况下,您可以从第一个http请求的成功/已解决回调中生成第二个http请求,依此类推。 e.g。
servicePOST.send(appConstants.BASE_MS_URL + 'Dcrs/activityDay.php',{
"date":d
}).then(function(result) {
$scope.dcrlocked = result.dcrlocked;
$scope.leaves = result.leaves;
//$scope.holidays = result.holidays;
//make another http request as below.
servicePOST2.send(url,{data or data from last request}).then(function(){
// make another http request. and so on.
})
});
由于所有http请求都是从最后一个http请求的成功回调中产生的,因此它将保证顺序的http请求。
修改强>
您可以在第二个函数中使用$promise
,在那里调用post请求。 e.g。
var deferred = $q.defer();
servicePOST.send(appConstants.BASE_MS_URL + 'Dcrs/activityDay.php',{
"date":d
}).then(function(result) {
$scope.dcrlocked = result.dcrlocked;
$scope.leaves = result.leaves;
//$scope.holidays = result.holidays;
deferred.resolve(result);
});
return deferred; // return deferred from your function.
不要忘记在控制器中注入$ q,然后将其传递给第二个函数。这将使post函数同步返回。如果您正在寻找,请告诉我。
答案 1 :(得分:0)
这可以帮到你
var TestService = function( $scope, servicePOST, AnotherService2, AnotherService3 )
{
// Level 1
servicePOST
.send(appConstants.BASE_MS_URL + 'Dcrs/activityDay.php',{
"date":d })// Request #1
.then( function( result ) // Response Handler #1
{
$scope.dcrlocked = result.dcrlocked;
// Level 2
AnotherService2 //AnotherService Call
.send({}) // Request #2
.then( function( result ) // Response Handler #2
{
$scope.leaves = result.leaves;
// Level 3
AnotherService3
.send({}) // Request #3
.then( function( result ) // Response Handler #3
{
//$scope.holidays = result.holidays;
});
});
});
};
答案 2 :(得分:0)
简而言之,你无法做到。 Javascript在设计上是非阻塞的,你需要看一下promises或实现嵌套的回调。