Programing

가입자가 관찰 가능한 오류에 대해 중지하지 않아야 함

c10106 2022. 3. 23. 19:58
반응형

가입자가 관찰 가능한 오류에 대해 중지하지 않아야 함

나는 자동적으로 오류에 대한 구독을 취소하는 구독자와 싸우고 있다.

observable
  .subscribe(
    (data) => {
      // some logic encountering an error during execution
      // comparable to throw new Error()
    }
  )

Try/catch 사용으로 예방할 수 있다.

observable
  .subscribe(
    (data) => try { 
        // some logic encountering an error during execution
        // comparable to throw new Error()
      } catch(e) {
      }
  )

하지만 주변에서 일하는 것 같은 느낌이야.

Subscriber 및 SafeSubscriber의 출처를 검색해 보았으며, 이 출처는 오류 시 자동으로 구독 취소를 호출한다.

  private __tryOrUnsub(fn: Function, value?: any): void {
    try {
      fn.call(this._context, value);
    } catch (err) {
      this.unsubscribe();
      throw err;
    }
  }

이러한 행동을 방지하는 유일한 방법은 자체 구독자를 구현하는 것인가 아니면 시도/채택을 사용하는 것인가?

그것은 올바른 행동이다.당신은 그것을 사용할 수 있다.catch()운영자는 동일한 출처에 다시 서명할 수 있다. 관찰 가능(또는 오류 시 다른 출처를 구독할 수 있음).

source
  .catch(err => Observable.of(null))
  .subscribe(...);

이것은 그냥 돌아올 것이다.null에서next원래 오류 대신 처리기.

가입자가 없는 경우 예외는 다시 발생한다는 점에 유의하십시오.error핸들러

예를 들어, 오류를 발생시키지 않기 위해 다음을 수행하십시오.

source
  ...
  .subscribe(..., error => {});

그러나 이것은 관찰 가능성의 기본 원칙 중 하나이기 때문에 이것은 항상 체인을 거부한다.0 또는 그 이상을 방출한다.next알림 및 하나complete또는error통지는 하지만 둘 다 하지 않는다.

구독을 취소하고 싶지 않은 곳에서 어떤 문제를 해결하려고 하는지 알 수 없고, 때로는 사용할 수 있다.Subject통과만 하면 된다.next알림 및 나머지 알림 무시...:

const subject = new Subject();
source.subscribe(val => subject.next(val));

subject.subscribe(...);

참조URL: https://stackoverflow.com/questions/44986873/subscriber-should-not-stop-on-error-in-observable

반응형