BACK
Уроки33. Ошибка — терминальное событие
Уроки · 33

33. Ошибка — терминальное событие

Урок-эксперимент: ошибка — это конец

Это короткий, но важный урок перед изучением обработки ошибок. Нужно увидеть собственными глазами: после error поток мёртв. Никакие последующие вызовы next или complete не дойдут до подписчика.

Почему это важно

Это не «ещё одно значение, тип которого — ошибка». Это финальный сигнал. Если в цепочке pipe возникла ошибка, она «убьёт» весь поток до подписчика — если только мы её не перехватим (что мы изучим в следующих уроках).

Формальный контракт

next* (error | complete)?
// Сколько угодно next подряд.
// Затем либо ошибка, либо завершение — и больше ничего.

Что нужно сделать

  1. В функции-рецепте по очереди вызовите: subscriber.next('A'), потом subscriber.error('Boom').
  2. А затем намеренно попытайтесь вызвать subscriber.next('B') и subscriber.complete().
  3. Запустите код и убедитесь: в логах есть только 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 // TypeScript
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...