我正在使用Java开发项目,特别是使用Spring和AngularJS。当我的页面加载(ng-init)时,我执行一个调用$ http查询的函数来检索环境变量列表。然后总是加载页面,我调用另一个$ http请求,需要我的第一个查询的结果。
问题是第二个查询在第一个查询完成之前就开始运行了,所以此时environnent变量是未定义的。我有一个异步查询问题。
你知道解决方案吗?
谢谢
答案 0 :(得分:0)
使用承诺。使第一个函数异步,并将第二个函数放在第一个函数的.then()中。
答案 1 :(得分:0)
查看documentation for the $q
服务,这是Promises的AngularJs(1.x)实现。
你可能有这样的东西
$http.get('url1')
.then(function (response1) {
console.log(response1);
});
$http.get('url2')
.then(function (response2) {
console.log(response2);
});
您的代码看起来应该是这样的
$http.get('url1')
.then(function(response1) {
console.log(response1);
return $http.get('url2')
})
.then(function(response2) {
console.log(response2);
});
在.then
调用返回后,$http
返回的承诺链接$http
以外的任何内容都无法保证(并且可能永远都不会)。
如果您不使用promises(或不常用的回调)来控制HTTP
请求/响应的异步流,那么您将无法保证这些操作何时相互关联。< / p>
答案 2 :(得分:0)
这里我的代码,Document是一个服务,loadDocument返回一个http请求:
$http.get('/env').then(function(variables) {
Document.loadDocument(variables).then(function (data) {
// next code.....
});
});
执行loadDocument时,变量未定义。我不太了解承诺的使用......