rxjs: сохранить подписку, кроме ошибки - PullRequest
1 голос
/ 20 июня 2019

Я не совсем понял следующее поведение:

let throw$ = Observable.throw(() => "Server error");
let testClick$ = Observable.fromEvent(this.saveButton.nativeElement, 'click')
.pipe(
    switchMap(() => throw$),
    finalize(() => console.log("finalize testClick$"))
);

let okClick$ = testClick$.pipe(
    catchError(() => Observable.of({})),
    finalize(() => console.log("finalize okClick$"))
);

let koClick$ = testClick$.pipe(
    catchError((error) => Observable.of(error)),
    finalize(() => console.log("finalize koClick$"))
);

okClick$.subscribe();
koClick$.subscribe();

Как видите, throw$ observable имитирует HTTP-запрос, который возвращает ошибку.

Когда я нажимаю на saveButton, поведение:

finalize testClick$
finalize okClick$
finalize testClick$
finalize koClick$

Проблема в том, что подписки не сохраняются.

Я думал, что при обнаружении внутренней повышенной ошибки с помощью catchError подписка сохранится.

Есть идеи о том, как сохранить мой наблюдаемый щелчок сохранения?

1 Ответ

1 голос
/ 20 июня 2019

Поведение правильное. Одна цепочка может выдать только одно error уведомление, которое заставляет цепочку утилизироваться (и вызываются finalize() обработчики).

Если вы хотите создать цепочку для повторной подписки, вы можете использовать оператор retry(), который автоматически переподписывается на error уведомления`.

testClick$.pipe(
  retry(),
);

Обратите внимание, что обработчик finalize() будет вызываться несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...