Я не совсем понимаю следующее поведение:
let throw$ = Observable.throw(() => "Server error");
let testClick$ = Observable.fromEvent(this.saveButton.nativeElement, 'click')
.pipe(
switchMap(() => throw$),
finalize(() => console.info("finalize testClick$"))
);
let okClick$ = testClick$.pipe(
catchError(() => Observable.of({})),
finalize(() => console.info("finalize okClick$"))
);
let koClick$ = testClick$.pipe(
catchError((error) => Observable.of(error)),
finalize(() => console.info("finalize koClick$"))
);
okClick$.subscribe();
koClick$.subscribe();
Как видите, throw$
observable имитирует http-запрос, который возвращает ошибку.
Когда я нажимаю на свой saveButton
, поведение следующее:
finalize testClick$
finalize okClick$
finalize testClick$
finalize koClick$
Проблема в том, что подписки не сохраняются.
Я думал, что поймав внутреннюю ошибку с помощью catchError
, подписка сохранится.
Любые идеи о том, как сохранить мою наблюдаемую кнопку сохранения?
Поведение правильное. Одна цепочка может генерировать только одно уведомление error
, которое заставляет цепочку удаляться (и вызываются обработчики finalize()
).
Если вы хотите связать повторную подписку, вы можете использовать оператора retry()
, который будет автоматически повторно подписываться на уведомления error
.
testClick$.pipe(
retry(),
);
Обратите внимание, что обработчик finalize()
будет вызываться несколько раз.