IT TIP

angular — 여러 http 호출의 데이터에 액세스-약속을 해결하는 방법

itqueen 2021. 1. 9. 11:14
반응형

angular — 여러 http 호출의 데이터에 액세스-약속을 해결하는 방법


나는 솔직해야한다고 생각하는 것에 갇혀있다. 세 가지 다른 ajax 호출에서 데이터를 가져 와서 세 가지를 모두 결합 및 처리하고 결과 배열을 사용자에게 표시해야합니다.

가장 간단한 형태로 내 코드는 다음과 같습니다.

function giftControler ($scope, $http) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");

내 변수가 실제 결과가 아닌 약속에 할당되고 http 요청이 이벤트 큐에 전달되었음을 이해합니다. 실행 가능한 명령문을 따라이 변수를 정의하면 이러한 변수가 정의되지 않습니다. 계속 처리하기 위해 이러한 약속이 해결 될 때까지 기다리는 방법을 이해할 수 없습니다.

내가하고 싶은 것은 즉시 코드를 추가하는 것입니다.

      for (var i=0; i<names.length; i++){
        for (var j=0; j<nice.length; j++){
          if (names[i] === nice[j]){
            names[i] = names[i] + "--Yay!!";
          };
        };
      };                
      $scope.kids = names;

문제는 마치 해결 된 배열 인 것처럼 약속을 처리 할 수 ​​없다는 것입니다. Javascript는 http 호출 직후에 이러한 for 문을보고 약속이 해결되지 않은 경우에도 즉시 실행하려고합니다.

내가 막히는 부분은 $ http apierror, success& 세 가지 기능을 가진 promise 객체를 제공한다는 것입니다 then. 이 경우 어떻게해야할지 모르겠습니다. 세 가지 모두에 대해 하나의 성공 함수가 필요합니다. 세 가지를 모두 해결하고 각각의 데이터를 처리 한 다음 결과를 각도 모델에 할당해야합니다.

나는 분명한 것을 놓치고 있다고 확신하지만 누군가 제안이 있습니까? 내 실제 작업에서는 여러 데이터 소스를 여러 번 호출하고 하나의 좋은 데이터 수집을 위해 많은 처리 (값 비교, 정렬, 연결 등)를 수행했지만이 문제를 통과 할 수 없습니다.

감사,


$ q의 함수 'all'을 사용할 수 있습니다.

function giftControler ($scope, $http, $q) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");
  $q.all([names, naughty,nice]).then(function(arrayOfResults) { 
      ... This callback would be called when all promised would be resolved
    });

이 방법은 조금 더 깨끗합니다.

다음은 문서에 대한 링크입니다. http://docs.angularjs.org/api/ng.$q

참조 URL : https://stackoverflow.com/questions/14545573/angular-accessing-data-of-multiple-http-calls-how-to-resolve-the-promises

반응형