2016-11-23 4 views
0

AuthHttp 서비스 (angular2-jwt)에 대한 '인터셉터'를 만들려고합니다. AuthHttp를 확장 한 클래스를 만들어 대신 사용했습니다. 지금까지 잘 작동하는 것 같습니다. 내가 지금하고 싶은 것은 서버가 401 코드로 응답하면 앱 내에서 로그 아웃을 강제하고 다음 구독을 무시하는 것입니다. (이러한 구독이 순차적으로 실행되는지 확실하지 않아서, 물어볼 수 있습니다.).각도 2에서 관찰 가능한 구독 순서를 중단합니다.

이 시나리오에서 오류를 표시하기 만하면이 구독에서 대기열을 중단하고 추가 구독을 무시하면됩니다. get 메소드를 위해 지금까지 얻은 코드는 다음과 같습니다.

get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    let observable = super.get(url, options); 
    observable.subscribe(
     () => { }, 
     (error: Response) => { 
      if (error.status === 401) { 
       // Logout and ignore all other subscriptions 
      } 
     } 
    ); 

    return observable; 
} 

이것이 가능합니까?

감사합니다.

답변

1

unsubscribe 수 있습니다. subscribe 메서드는 Subscription 개체를 반환합니다. 당신은 그 구독을 취소 할 수 있습니다 :

get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    let observable = super.get(url, options); 
    let subscription = observable.subscribe(
     () => { }, 
     (error: Response) => { 
      if (error.status === 401) { 
       // Logout and ignore all other subscriptions 
       subscription.unsubscribe(); 
      } 
     } 
    ); 

    return observable; 
} 
+0

답변 주셔서 감사하지만 나는 이것으로 무엇을 성취 할 것인지 이해하지 못합니다. 테스트로서 나는 당신의 코드를 붙여 넣었고 console.log에 '탈퇴'를 넣었다. 다른 구독 (.get()을 사용하여 나머지 API를 호출하고 관찰 가능 항목에 가입하는 서비스에서) 다른 문자열과 함께 다른 console.log를 작성했습니다. 이 두 가지 모두 콘솔에 인쇄됩니다. 내가 피하고 싶은 것은이 observable의 다른 오류 처리기가 실행되지 않는다는 것입니다. –

+0

그렇다면 귀하의 질문을 이해할 수 있는지 잘 모르겠습니다. 문제를 좀더 자세히 설명해 주시겠습니까? – yarons

+0

REST API에 대한 로그인이 필요한 APP를 설정했습니다. 로그인 할 때, 앱은 저장되고 (AuthHttp로) 모든 보안 API 호출의 유효성을 검사하는 데 사용되는 jwt 토큰을 발행합니다. 데이터를 검색 할 때 게시물을 사용하거나 전화를 받고 구독하여 검색하거나 오류를 표시합니다 (연결할 수 없습니다). 서버에서 호출의 유효성을 검사 할 수없는 경우 401을 반환합니다. 모든 인증 된 호출을 확인하는 함수 (인터셉터)를 추가하고 서버가 401을 반환하면 로그 아웃하고 다른 모든 오류 검사를 건너 뛸 수 있습니다. 가능한 경우 구독했다. –

관련 문제