我創建了以下控制器,其中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