Уроки33. Ошибка — терминальное событие
Уроки · 33
33. Ошибка — терминальное событие
Урок-эксперимент: ошибка — это конец
Это короткий, но важный урок перед изучением обработки ошибок. Нужно увидеть собственными глазами: после error поток мёртв. Никакие последующие вызовы next или complete не дойдут до подписчика.
Почему это важно
Это не «ещё одно значение, тип которого — ошибка». Это финальный сигнал. Если в цепочке pipe возникла ошибка, она «убьёт» весь поток до подписчика — если только мы её не перехватим (что мы изучим в следующих уроках).
Формальный контракт
next* (error | complete)?
// Сколько угодно next подряд.
// Затем либо ошибка, либо завершение — и больше ничего.
Что нужно сделать
- В функции-рецепте по очереди вызовите:
subscriber.next('A'), потомsubscriber.error('Boom'). - А затем намеренно попытайтесь вызвать
subscriber.next('B')иsubscriber.complete(). - Запустите код и убедитесь: в логах есть только
Next: AиError: Boom.BиCompleteне появились — RxJS их «проигнорировал».
Решение spoiler · click to reveal
const { Observable } = Rx;
const source$ = new Observable(subscriber => {
subscriber.next('A');
subscriber.error('Boom');
subscriber.next('B');
subscriber.complete();
});
source$.subscribe({
next: value => console.log('Next: ' + value),
error: error => console.log('Error: ' + error),
complete: () => console.log('Complete'),
}); script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...