2017-10-23 2 views
0

해결할 수없는 흥미로운 문제가 있습니다. 내 응용 프로그램은 다양한 끝점에 대한 HTTP 호출을 사용하며 대다수는 문제없이 작동합니다. 특히 두통을 유발하는 것이 있으며, 아마도 그 중 가장 단순합니다.HTTP 응답이 뒤집혔습니다.

다음과 같은 반환 값이있는 함수가 포함 된 서비스가 있습니다.

return this._http.post(this.baseEndPoint + this.uri, postc, options) 
     .map(res => res.json()); 

내게 꽤 표준입니다. 이상한 점은 오류 응답/코드에서 내 성공/완료 기능의 코드가 실행되고 모든 성공적인 응답에서 내 오류 기능의 코드가 실행되고 있다는 것입니다. API의 응답은 404 및 204로 되돌아 와서 적절하게 파악 될 것으로 기대합니다.

this._service.function(param, param1) 
    .subscribe(
    error => { 
     console.log(error); 
    }, 
    () => { 
     console.log('lol wut'); 
    } 
); 

여기에는 특별한 것이 없습니다. 또한 내 요청이 두 개의 네트워크 호출 중 하나 인 것을 알 수 있습니다. 하나는 폴리필로 시작하여 200의 상태로 성공한 것으로 표시되지만 그 다음에는 "기타"로 트리거 된 404 상태의 다른 호출이 이어집니다.

제 궁금한 사항은 다음과 같습니다. 어떻게 해결하고 적절한 장소에서 잡힐 수 있습니까? 왜 전화가 두 번입니까?

답변

1

당신 때문에 요청 옵션, 각도 차종의 두 개의 네트워크 요청을보고있다 : 순서가 문제가 될 경우

this._service.function(param, param1).subscribe(onNext, onError, onComplete); 

, 당신은 또한, 관찰자 ​​인터페이스를 구현과 같이 가입 할 객체를 제공 할 수 있습니다 요청의 교차 출처 특성 때문에 프리 플라이트 HTTP OPTIONS 요청. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS. 은 또한 당신의 콜백 여기에 잘못된 순서로

this._service.function(param, param1) 
     .subscribe(
      error => { // DONT CONFUSE with the name error, it can be any //name 
       console.log(error); 
      }, 
      () => { 
       console.log('lol wut'); 
      } 
     ); 

에 기록 된 첫 번째 인수 방법은 오류에 대한 2 차 성공에 전화해서 내가 생각하는 정보를 세 번째입니다. 실제 콜백은

this._service.function(param, param1) 
     .subscribe(
      data=>{ 
        console.log("status code is ",data.status);}, 
      error => { 
       console.log(error); 
      }, 
      () => { 
       console.log('lol wut'); 
      } 

     ); 

이어야합니다.

+0

흥미 롭다. 나는 그 순서가 문제가 아니며 응답 유형을 포착하여 오류가 발생했다고 생각했다. 나는 이것을 시험해보고 무슨 일이 일어나는지 보게 될 것이다. – chrisjnas

+0

다음은 Observable 라이브러리에서 구독하는 정의입니다. ------------------ subscribe (다음 ?: (값 : T) => void, error ?: (오류 : any) => void, complete ?:() => void) : 서브 스크립 션; ---------------------- – TruckDriver

+0

아, 완벽합니다. 많이 고마워! – chrisjnas

1

두 가지 네트워크 요청이 표시되는 이유가 확실하지 않지만 인수 이름에 따라 콜백이 취소 된 것 같습니다. subscribe의 첫 번째 인수는 next 스트림에서 알림을 실행할 함수가 될 수 있으며 두 번째 인수는 error 알림에서 호출됩니다. 세 번째는 완료 알림입니다.

this._service.function(param, param1).subscribe({ 
    next: x => console.log(x), 
    error: x => console.error(x), 
    complete:() => console.info('done!'), 
}); 
관련 문제