2014-10-08 3 views
1

나는 $ http 서비스와 함께이 이상한 문제에 직면하고있다. $ q.all()로 싸인 회사에서 제공하는 API에 대한 모든 요청은 동일한 응답을 반환한다.여러 요청, 동일한 응답

var promises = [ 
    $httpPromiseA(), 
    $httpPromiseB(), 
    $httpPromiseC() 
]; 

$q.all(promises) 
    .then(function (response) { 
     $log.log(response); 
    }); 

// $log.log returns [expectedObjectFromA, expectedObjectFromA, expectedObjectFromA] 

이것은 임의로 발생합니다. expectedObjectFromA는 expectedObjectFromB 또는 expectedObjectFromC가 될 수 있습니다. 사실은 세 객체가 모두 동일하거나 두 개 중 하나와 둘 중 하나를 반환한다는 것입니다.

선형 방식으로 하나씩 연결하면 완벽하게 작동하지만 더 많은 시간이 소요됩니다. 물론 그 일을 성취하십시오.

var def = $q.deferred(); 
var resolvedData = []; 

$httpPromiseA() 
    .then(function (response) { 
     $log.log(response); 

     resolvedData.push(reponse); 

     return $httpPromiseB(); 
    }) 
    .then(function (response) { 
     $log.log(response); 

     resolvedData.push(reponse); 

     return $httpPromiseC(); 
    }) 
    .then(function (response) { 
     $log.log(response); 

     resolvedData.push(reponse); 

     return def.resolve(resolvedData); 
    }); 

return def.promise(); 

// $log.log returns [expectedObjectFromA], 
// [expectedObjectFromB] and [expectedObjectFromC] 
// as expected. ResolvedData brings [expectedObjectFromA, 
// expectedObjectFromB, expectedObjectFromC]. 

여기서 일어날 수있는 일에 대한 지침을 제공 할 수 있습니까?

$ http 및 $ q의 핵심 구현을 사용하고 있습니다. 나는 Kris Kowalk의 Q의 API 리소스를 기반으로 $ decorator로 적용된 $ q.allSettled를 시도했지만 성공하지 못했습니다.

감사합니다.

편집 1 : 그것은 래퍼 기능 그게 내 응용 프로그램에서 여기의 $http 서비스를 호출 때문에

I 별도로 함수에 인수를 전달할 수 없습니다. 래퍼 함수는 String을 첫 번째 인수로 사용하고 Object을 두 번째 인수로 사용합니다. 래퍼 함수는 $http 호출을 반환합니다.

편집 2 :

Plunker 전화 플리커 API 2 개 동시 요청의 인스 타 그램 API에 하나 다른. 문제는이 Plunker가 발생하지 않습니다. 나는이 문제를 다루는 방법을 정말로 모른다. 이건 정말 짜증나.

+0

var promises = [http httpPromiseA(), $ httpPromiseB(), $ httpPromiseC()]; $ q.all (promises) .then (function (responseA, responseB, responseC) {$ log.log (response);}); // $ log.log는 [expectedObjectFromA, expectedObjectFromA, expectedObjectFromA]를 반환합니다. 약속의 각 응답을 별도로 잡아야합니다. 코드에서 위의 변경 사항을 시도해보십시오. –

+0

@CoderJohn 질문을 보았습니까? 당신의 해결책은 이해가되지 않습니다. 당신이 제안한 것처럼'$ q.all()'을 다루도록 노력하십시오 ... –

+0

명백히하기 위해, 병렬 요청을 사용할 때 때때로 깨지는 버그가 있거나 깨진 API를 해결하려고합니까? –

답변

0

문제는 서버 측에서 발생했습니다. 서버 측에서는 동시 요청에 문제가있어 같은 응답으로 모두 응답했습니다.

모든 지원과 관심에 감사드립니다.

0

$ q.all에서는 약속을 전달하고 대신 함수를 실행하는 것이 좋습니다. $ httpPromiseA() 대신 $ httpPromiseA. $ promise를 사용합니다.

+0

이 함수에 어떤 인수를 전달할 것인가? 모든 기능에는 그들의 주장이 필요합니다. 이것 역시 나에게 이해가되지 않습니다. –

+0

'var parameters = {} : var promiseA = $ httpPromiseA (매개 변수); $ q.all ([promiseA. $ promise, ..., ....]); ' – user3040068

+0

'$ http '서비스를 호출하는 래퍼 함수이기 때문에 인수를 전달할 수 없습니다. .wrapper 함수는'String'을 첫 번째 인수로,'Object'를 두 번째 인수로 기대합니다. 래퍼 함수는'$ http' 호출을 반환합니다. –