我需要同步调用3 $ http请求。我的意思是在收到第一次请求的回复后,将调用第二个请求。在收到第二个回复后,将调用下一个第3个。
示例:
$http.get('FIRSTURL', param1).success(function(response){
$http.get('SECONDURL', param2).success(function(response){
$http.get('THIRDURL', param3).success(function(response){
//Need to do some stuff with response
});
})
});
任何人都可以建议使用AngularJ
更好地实现它答案 0 :(得分:0)
这是按顺序执行此操作的唯一方法。如果你想让它更漂亮,你可以将每个项目放入一个函数,然后链接then
调用:
function doSomething() {
return $http.get('FIRSTURL', param1);
}
function doSomething1() {
return $http.get('SECONDURL', param2);
}
function doSomething2() {
return $http.get('THIRDURL', param3);
}
然后:
doSomething().then(doSomething1).then(doSomething2);
答案 1 :(得分:0)
如果你想强制同步,那么你可以利用"然后"从$ http调用返回的promise的方法, 请注意,这只会同步您的调用顺序,它不会导致调用阻止您的其余代码。
$http.get('https://foo1')
.then(function(response) {
return $http.get('https://foo2');
})
.then(function(response) {
return $http.get('https://foo3');
})
.then(function(response) {
return $http.get('https://foo4');
})
.catch(function(response) {
console.error('error', response.status, response.data);
})
.finally(function() {
console.log("finally");
});
答案 2 :(得分:0)
像常规承诺一样排队:
$http.get('http://fiddle.jshell.net', param1)
.success(function(response){
return $http.get('http://fiddle.jshell.net', param2)
})
.success(function(response){
return $http.get('http://fiddle.jshell.net', param3);
})
.success(function(response){
console.log('done!');
//Need to do some stuff with response
});
以下是工作示例:http://jsfiddle.net/301gt2sm/
答案 3 :(得分:0)
您可以使用promise功能将它们链接起来,而不是嵌套回调:
$http.get('FIRSTURL', param1)
.then(getSecond)
.then(getThird)
.then(function(response){
//Need to do some stuff with response
});
function getSecond(response){ 返回$ http.get(' SECONDURL',param2); }
function getThird(response){ 返回$ http.get(' THIRDURL',param3); }
答案 4 :(得分:0)
虽然不确定如何在特定的AngularJS代码中处理它,但仍然有一个使用Javascript bind()的工作。请试试这个。
myService.doSomething().then(myService.doSomething1.bind(myService)).then(myService.doSomething2.bind(myService));