이 설명은 the source code을 알지 못하면 이해하기가 어렵습니다. 자세한 내용은 Insider’s guide into interceptors and HttpClient mechanics in Angular 문서에서 설명합니다.
get
과 같은 http
메서드를 호출하면 Angular가 요청을 만듭니다. 그런 다음이 요청은 관찰 가능한 시퀀스를 시작하는 데 사용되며 가입시이 요청은 인터셉터 체인을 통해 전달됩니다. 여기
function get() {
let req: HttpRequest<any> = new HttpRequest<any>();
const events$ = of(req).pipe(concatMap((req: HttpRequest<any>) => {
// running request through interceptors chain
this.handler.handle(req);
}));
return $events;
}
이 소스에서 주석이다 : 이것은 시퀀스 처리 (매우 단순화 된 코드)의 일환으로 수행되는 Observable.of() 초기 요청에
시작 및 실행 concatMap() 내부에 핸들러 ( 에는 모든 인터셉터가 포함됨)가 있습니다. 이런 식으로 처리기는 Observable 체인 내에서 을 실행합니다. 은 subscription에서 인터셉터가 다시 실행되도록합니다. 이로 인해 은 인터셉터를 포함하여 처리기를 다시 실행합니다.
는 그래서
$events
스트림은 HTTP 요청 방법에서 반환 및
을 시도 할 수있는 것입니다. 인터셉터는 항상 원래 요청으로 시작해야합니다. 요청이 변경 가능하고 이전 인터셉터 실행 중에 수정 될 수있는 경우이 조건을 충족시킬 수 없습니다. 따라서 요청과 모든 구성 요소는 변경 불가능해야합니다.
질문이 여기에 여러 번 나타나고 github의 각도 저장소 문제 추적기 –
@ Jota.Toledo, 예,이 질문에 잠시 동안 괴롭힘을 당했기 때문에 누군가가이 리소스를 추가 할 때까지 좀 기다리고있었습니다. 게다가. 인터셉터가 두절 과정에서 어떻게 작동 하는지를 설명하는 큰 기사를 끝 마치고 조사 중 일부로이 질문을 파악했습니다. –