Programing

오류를 포착했음에도 불구하고 rxj가 설명을 취소함

c10106 2022. 3. 11. 22:00
반응형

오류를 포착했음에도 불구하고 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: 관측 자료 실행

관측 가능한 첫 번째가 종료되지 않도록 하려면 관측 가능한 수명을 제외하고 오류가 여러 번 발생할 수 없으므로 오류를 발생시키지 마십시오.

참조URL: https://stackoverflow.com/questions/57609812/rxjs-unsubscription-happening-despite-catching-the-error

반응형