我创建了以下控制器,其中3个不同$ http GET调用了rest-api。REST-api上的同步查询的随机结果
$http({method: 'GET', url: REST_CONFIG.url+'/api/lims/data/runs/list'})
.success(function(data, status, headers, config) {
form.runs = data;
})
.error(function(data, status, headers, config) {
form.runs = [];
});
form.data.analysis = {"analysisName": "","analysisprofile": {"workflows": []},"run": ""};
//Get all Default Workflows
$http({method: 'GET', url: REST_CONFIG.url+'/api/workflows/default/list'})
.success(function(data, status, headers, config) {
form.workflows = data;
})
.error(function(data, status, headers, config) {
form.workflows = [];
});
//Get all databases
$http({method: 'GET', url: REST_CONFIG.url+'/api/list-databases'})
.success(function(data, status, headers, config) {
form.databases = data;
})
.error(function(data, status, headers, config) {
form.databases = [];
});
有时我从查询1和查询2(查询2具有查询1的结果)的结果相同。在这种情况下,rest-api执行query1的2倍。我的浏览器说,http查询是好的(3种不同的url)。这很奇怪,真的很烦人。 我也试过:
//Get all runs
runs = $http({method: 'GET', url: REST_CONFIG.url+'/api/lims/data/runs/list'});
//Get all Default workflows
defaultWorkflows = $http({method: 'GET', url: REST_CONFIG.url+'/api/workflows/default/list'});
//Get all databases
databases = $http({method: 'GET', url: REST_CONFIG.url+'/api/list-databases'});
$q.all([runs, defaultWorkflows, databases]).then(function(values) {
form.runs = values[0].data;
form.workflows = values[1].data;
form.databases = values[2].data;
});
没有工作。 它来自rest-api吗?或者我做错了什么?
编辑 问题解决了。关键是使用$ q和promise和deffer()。这plunkr帮了我很多:http://plnkr.co/edit/NGMp4ycmaCqVOmgohN53?p=preview
我使用下面的代码:
var getInfo = function(){
var promises = [];
var urls = [];
urls.push(REST_CONFIG.url+'/api/lims/data/runs/list');
urls.push(REST_CONFIG.url+'/api/workflows/default/list');
urls.push(REST_CONFIG.url+'/api/list-databases');
angular.forEach(urls, function(url){
var deffered = $q.defer();
$http({method: 'GET', url: url})
.then(function successCallback(response) {
deffered.resolve(response.data);
}, function errorCallback(response) {
deffered.reject();
});
promises.push(deffered.promise);
})
return $q.all(promises);
}
var init = function(){
var promiseInfo = getInfo();
promiseInfo.then(function(datas){
form.runs = datas[0];
form.workflows = datas[1];
form.databases = datas[2];
})
};
在你的第一个例子中,你如何/在哪里使用'forms'?听起来好像你只是在通话完成之前使用它,但我们不能说,因为你没有显示。 –
你使用什么版本的角? 从版本1.6成功和$ http的错误被删除... http://www.codelord.net/2015/05/25/dont-use-%24https-success/ –
你不应该使用'.success '。它已被弃用,并从最新的角色版本中删除。 http://stackoverflow.com/a/35331339/2495283 – Claies