2017-04-12 5 views
1

rest-api에 3 가지 $ http GET 호출을 사용하여 다음 컨트롤러를 만들었습니다.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 = []; 
     }); 

간혹 query1과 query2 (query2는 query1의 결과가 있음)의 결과가 같습니다. 이 경우 나머지 api는 query1의 2 배를 수행합니다 1. 내 브라우저는 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; 
     }); 

아무것도 효과가 없다. 나머지 API에서 오는 것입니까? 아니면 내가 잘못하고있는거야?

수정 문제가 해결되었습니다. 요점은 promise와 deffer()와 함께 $ q를 사용하는 것이 었습니다. http://plnkr.co/edit/NGMp4ycmaCqVOmgohN53?p=preview

나는 다음과 같은 코드를 사용 :이 plunkr은 나에게 많은 도움이

당신은 $q.all를 사용하여, 예를 들어, forms를 사용하기 전에 완료하기 위해 모든 요청을 기다리는해야 할 필요가
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]; 
     }) 
    }; 
+0

첫 번째 예에서 how/where는 'forms'를 사용하고 있습니까? 전화가 끝나기 전에 그냥 사용하고있는 것처럼 들리지만 그 사실을 알지 못했기 때문에 말할 수는 없습니다. –

+0

어떤 각도의 각도를 사용하고 있습니까? 버전 1.6부터 $ http에 대한 성공과 오류가 제거되었습니다 ... http://www.codelord.net/2015/05/25/dont-use-%24https-success/ –

+1

'.success '. 사용되지 않으며 가장 최신의 각 릴리스에서 제거되었습니다. http://stackoverflow.com/a/35331339/2495283 – Claies

답변

0

. 또한 thencatch을 사용해야합니다. successerror은 1.5 버전에서 다시 사용되지 않는 : 거부를 통해 해상도로 설정되어 있기 때문에 모든 요청 세, 그것은 거부하지 않을 것이다 (완료되면 form에 해결할 약속을 반환

function getInfo() { 
    // Assuming `form` exists here... 
    var promises = []; 
    promises.push(
     $http({method: 'GET', url: REST_CONFIG.url+'/api/lims/data/runs/list'}) 
      .then(function(data, status, headers, config) { 
       form.runs = data; 
      }) 
      .catch(function(data, status, headers, config) { 
       form.runs = []; 
      }) 
    ); 
    form.data.analysis = {"analysisName": "","analysisprofile": {"workflows": []},"run": ""}; 
    //Get all Default Workflows 
    promises.push(
     $http({method: 'GET', url: REST_CONFIG.url+'/api/workflows/default/list'}) 
      .then(function(data, status, headers, config) { 
       form.workflows = data; 
      }) 
      .catch(function(data, status, headers, config) { 
       form.workflows = []; 
      }) 
    ); 
    //Get all databases 
    promises.push(
     $http({method: 'GET', url: REST_CONFIG.url+'/api/list-databases'}) 
      .then(function(data, status, headers, config) { 
       form.databases = data; 
      }) 
      .catch(function(data, status, headers, config) { 
       form.databases = []; 
      }) 
    ); 
    return $q.all(promises).then(() => form); 
} 

원래 코드와 일치하여 catch 핸들러).

+0

$ q.all에서 잘 작동 했으므로 약속을 지키 셨습니다. 대단히 감사합니다! 내 게시물을 수정합니다. – JBeghain

+0

@JBeghain : 도움이 된 것을 기쁘게 생각합니다! * "내 게시물을 편집 할 것입니다"* 왜? –