我正在尝试编写一个Angular页面来与我的Nodejs服务器进行通信,但我遇到了麻烦。
我需要使用多个Ajax请求,这些请求依赖以前的ajax请求中的数据才能工作。
因此,Ajax请求#1提供所有其他Ajax请求使用的数据,而Ajax请求#2使用来自ajax请求#1的数据来获取Ajax请求#3所需的数据。
由于Angular是异步的,如何在进行下一次ajax调用之前让我的脚本等待来自第一个的数据。
id = ajax()
等待数据
token = ajax(id)
等待数据
gametoken = ajax(id,token)
等待数据
答案 0 :(得分:2)
Chandermani是正确的,只需记住确保在您需要的范围内提供所需的变量。
var id,token,gametoken;
$http.get('http://host.com/first')
.then(function(result){
id=result;
return $http.get('http://host.com/second/'+id);
}
.then(function(result){
token = result
return $http.get('http://host.com/third'+id+'/'+token);
}
.then(function(result){
gametoken = result;
//Do other code here that requires id,token and gametoken
}
编辑: 你不必将承诺链接起来。如果您想在以后拨打电话,并且想要确保承诺已经解决,您可以使用$ q.all();
var id,token,gametoken;
var p1 = $http.get('http://host.com/first')
.then(function(result){
id=result;
}
// Later on to make your new second call
$q.all([p1]).then(function(){
//Make second call knowing that the first has finished.
}
$ q.all()接受一个数组,这样你可以根据需要加入多个promises,并等到它们全部解析完毕。