오류를 포착했음에도 불구하고 rxj가 설명을 취소함
나는 이벤트 방출기를 가지고 있다.testEvent
.testEvent
파이프 체인을 가지고 있고 그 체인에 오류가 던져진다.하지만 나는 또한 체인의 두 곳에서 실수를 잡고 있다.그럼에도 불구하고 나의testEvent
자동으로 등록이 취소되는 겁니다
왜 그런지 누가 설명해줄래?
import { Component, EventEmitter } from '@angular/core';
import {map} from 'rxjs/operators';
import {catchError, switchMap} from 'rxjs/internal/operators';
import {forkJoin, of} from 'rxjs';
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
name = 'Angular';
testEvent$ = new EventEmitter();
ngOnInit(){
this.testEvent$
.pipe(
map((x) => {
alert();
throw "error";
},
catchError((e)=>{
console.log(e);
return of(1);
})
)
)
.subscribe(null, (e)=>{
console.log(e);
})
}
test(){
this.testEvent$.emit(''); //works only once
}
}
문제는 네가 돌아온다는 것이다.of(1)
에러 처리기에서.그런 다음 구독은 한 번만 방출되는 관찰 가능으로 다시 구독한다.그것은 더 이상 에 가입되어 있지 않다.testEvent$
그러므로 그것은 한 번 배출한 후에 완성된다.
catchError
콜백은 실제로 두 번째 주장으로 관찰 가능한 원본의 것을 받는다.원래 관찰 가능한 내용을 계속 들으려면 오류 처리기에서 해당 내용을 반환하십시오.
catchError((e, originalObservable)=>{
console.log(e);
return originalObservable;
})
콜백에 대한 RxDocs:
논쟁의 오류로 간주되는 함수, 즉 오류로 간주되며, 그것을 다시 반환하여 관찰할 수 있는 출처를 "추적"할 경우에 대비하여 관찰할 수 있는 출처인 포착된 함수어떤 것이든 셀렉터가 반환하는 것은 관찰 가능한 사슬을 계속하는 데 사용될 것이다.
에 오류를 던지면map
이 오류는 를 통해 전파된다.onError
시퀀스를 종료하는 채널와 함께catchError
이 오류를 포착하고 다음 시퀀스로 이동하십시오.of(1)
, 그러나 에러가 발생한 첫 번째 시퀀스는 여전히 종료된다.
관찰 가능한 실행에서 0 ~ 무한 다음 통지가 전달될 수 있다.Error 또는 Complete 알림이 전달된 경우, 그 후 다른 어떤 것도 배달할 수 없다.
RxJS: 관측 자료 실행
관측 가능한 첫 번째가 종료되지 않도록 하려면 관측 가능한 수명을 제외하고 오류가 여러 번 발생할 수 없으므로 오류를 발생시키지 마십시오.
'Programing' 카테고리의 다른 글
반응하는 이미지의 느린 렌더링 (0) | 2022.03.11 |
---|---|
Python의 dritt.keys()는 왜 집합이 아닌 목록을 반환하는가? (0) | 2022.03.11 |
라우터 클릭을 두 번 이상 반복하고 브라우저 뒤로 단추 (0) | 2022.03.11 |
반응형 CSS 원 만들기 (0) | 2022.03.11 |
ngrok가 Resact dev 서버에 연결을 시도할 때 잘못된 호스트 헤더 (0) | 2022.03.11 |