Уроки10. EMPTY и throwError
Уроки · 10
10. EMPTY и throwError
Два специальных потока
Иногда нужно вернуть Observable «без полезных данных». Например, в ветке условия: «если что-то пошло так, верни пустоту», «если что-то пошло не так, верни ошибку». Для таких случаев в RxJS есть два готовых источника.
EMPTY — пустой поток
EMPTY — это уже готовый Observable. Он не отправляет ни одного значения через next и сразу же завершается через complete.
EMPTY
// complete() — и всё
Пригодится, когда сигнатура функции требует вернуть Observable, но у вас нет данных, и ошибки тоже не было.
throwError — поток-ошибка
throwError(factory) создаёт поток, который при подписке сразу падает с ошибкой. factory — это функция, возвращающая объект ошибки.
throwError(() => 'Boom')
// error('Boom') — и всё
Почему передаётся функция, а не сама ошибка? Чтобы новый объект ошибки создавался каждый раз при подписке — это безопаснее и удобнее для отладки.
Что нужно сделать
- Подпишитесь на
EMPTY. В объекте подписки укажите только обработчикcomplete, который выведет'Empty complete'. - Замените
Rx.EMPTYуfailed$наthrowError(() => 'Boom'). - Обработчик ошибки уже выводит
Error: Boom— менять его не нужно. - Ожидаемый вывод:
Empty complete → Error: Boom.
Решение spoiler · click to reveal
const { EMPTY, throwError } = Rx;
EMPTY.subscribe({
complete: () => console.log('Empty complete')
});
const failed$ = throwError(() => 'Boom');
failed$.subscribe({
error: error => console.log('Error: ' + error)
}); script.ts
CONSOLE · Console Output
Нажмите на запуск, чтобы увидеть результат...