Підписка на Subject RxJS і обробка помилок
Працюю з RxJS в контексті Angular applications, але покищо вистачало використовувати дуже малу частину його арсеналу — Subject, BehaviorSubject, до десятка операторів... Зараз виникла потреба обробляти помилки такого плану:
import { Subject } from 'rxjs/Subject'; import { of } from 'rxjs/observable/of'; import { catchError } from 'rxjs/operators'; const subject = new Subject<number>(); subject .pipe(catchError(err => of(err))) .subscribe(val => console.log(val)); subject.next(1); subject.next(2); subject.next(3); subject.error(new Error); subject.next(4);
Виводить:
1 2 3 Error // here a trace of the error
Тобто проблема в тому, що subject.next(4);
не виводиться через те, що subject
схопив помилку. І якщо десь у в’юхах є безпосередня підписка на Observable цього subject’а, то вона перестає працювати.
В документації Angular згадується за обробку помилок при HTTP-запитах, але цей сценарій не підходить для Observable у в’юхах, бо підписка на HTTP-запити відбувається багато разів, на відміну від підписки у в’юхах.
Хто як вирішує цю проблему?
8 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів