У меня есть наблюдаемый, который выдаст ошибку, когда счетчик будет достигать 5:Что произойдет с дополнительными щелчками
let counter = 0;
const source2 = Rx.Observable.of(true)
.map(() => [1,2,3,4,5]);
source2
.subscribe((x) => console.log(x),
(err) => console.log(err),
() => console.log("complete 2!!"));
const source1 = Rx.Observable.fromEvent(document, 'click')
.do(() => console.log("Document clicked!"))
.do(() => counter++)
.map(() => {
if(counter > 5) {
counter = 0;
throw new Error("Counter is too big!");
}
return true;
})
.catch((oError, oSource$) => source2)
source1
.subscribe((x) => console.log(x),
(err) => console.log(err),
() => console.log("complete!!"));
Когда ошибку вышла метало, то он переключится на source2
, как вы можете видеть на код выше.
Когда я делаю дальнейшие щелчки по документу, ничего не произойдет, почему? Что произойдет с дальнейшими щелчками?
Как общий __personal__ side-note: __Don't__ выдавать исключения для семантических вопросов, например, в случае, когда некоторые данные достигают некоторого семантического предела. (Я не знаю вашего кода, но он выглядит так). Ошибки/исключения должны быть выбраны для проблем __technical__, например, например. когда требуемый параметр отсутствует или если полученные данные не имеют ожидаемой структуры. - Может быть, вы можете описать свой желаемый сценарий - я уверен, что это может быть обработано rxjs элегантным способом, не порождая ошибок. – olsn
Что я не понимаю, когда я возвращаюсь в методе catch, источник вроде: '.catch ((oError, oSource $) => oSource $)', то подписчики не будут отписаны, почему? –
'catch'-operator - это просто оператор-оператор, который позволяет реагировать на ошибку в потоке независимо от любого абонента - поток все равно будет завершен – olsn