В предыдущих статьях мы пытались понять, что такое observable
, как он работает и как себя ведет в различных сценариях. Мы рассмотрели, как обрабатывать ошибки в observables
, а также узнали, что наблюдаемые объекты заканчиваются.
В этой статье мы подробно рассмотрим, как создать observable
.
RxJs имеет довольно много методов для создания observable
, и мы рассмотрим некоторые из них в этой статье.
Create
Начнем с оператора create
, который мы использовали в предыдущих статьях для создания Observable.
Как указано в документации, «Rx.Observable.create
- это псевдоним для Observable
конструктора» - лучший способ описать его.
Синтаксис этого метода довольно прост, он принимает одну функцию в качестве входных данных, которая, в свою очередь, передается наблюдателю, который может выдавать значения с помощью .next()
, выдавать ошибки с помощью .error()
и завершать с .complete()
.
Часто бывает сложно использовать метод create для создания сложной наблюдаемой. Итак, у нас есть еще много так называемых операторов создания, которые делают использование observables
очень простым и легким.
Of
Сначала идет оператор Of
, возможно, самый простой оператор создания из всех.
Этот оператор создает Observable
, который выдает значения, указанные вами как arguments
, сразу одно за другим, а затем выдает полное уведомление.
Использовать его также очень просто, посмотрите пример ниже.
FromEventPattern
Затем идет FromEventPattern
, который создает Observable из API на основе функций addHandler / removeHandler.
Метод FromEventPattern
принимает два аргумента: один - addHandler
, другой - removeHandler
. addHandler
вызывается, когда выходной Observable подписан, а removeHandler
вызывается, когда подписка отменяется.
Синтаксис этого метода следующий
FromEvent
FromEvent
создает Observable
, который генерирует события определенного типа, исходящие от заданной цели события.
Например, вы можете использовать этот метод для создания Observable
из DOM
событий, событий узла EventEmitter
или других.
Можно сказать, что это синтаксический сахар для FromEventPattern
для обработки случаев Dom Events
и узла EventEmitter
.
Этот метод принимает два аргумента: один - это target
(как элемент dom) и eventName
. Обработчик событий присоединяется, когда выход Observable
подписан, и удаляется, когда Subscription
отписывается.
Синтаксис FromEvent
следующий
FromPromise
Метод FromPromise
просто преобразует обещание в Observable
. Он возвращает Observable
, который просто выдает Promise’s
разрешенное значение, а затем завершается.
Этот метод принимает на вход обещание.
Интервал
Interval
создает Observable
, который выдает последовательные числа через каждый указанный интервал времени. Он начинается с 0
и никогда не заканчивается.
Этот метод принимает временной интервал, через который должно быть выдано число в мс.
Диапазон
Range
создает Observable, который генерирует последовательность чисел в указанном диапазоне. Оператор Range
генерирует ряд последовательных целых чисел по порядку, где вы выбираете start
диапазона и его length
.
Этот метод принимает 2 аргумента: один - это start
, а другой - length
последовательности.
Синтаксис наблюдаемого диапазона выглядит примерно так.
Таймер
Timer
создает Observable, который начинает излучать после initialDelay
и выдает все возрастающие числа после каждого period
времени после этого.
Если второй аргумент не передан, он просто выдает 0
после начальной задержки и завершается.
Синтаксис таймера os работает следующим образом.
Есть несколько операторов создания служебных программ, которые используются вместе с другими операторами для обработки определенных случаев. Некоторые из них перечислены ниже.
Пустой
Оператор empty
работает в точности так, как следует из его названия: он не выдает никаких значений и сразу выдает complete
уведомление.
Вы можете использовать его, как показано ниже
Бросать
Аналогичным образом метод Throw
используется для выдачи ошибки и бездействия.
Его синтаксис похож на empty
.
Никогда
Точно так же метод Never
ничего не делает, на самом деле он никогда не выдает никакого значения, не выдает ошибку и не завершает работу.
Это некоторые из операторов для создания observables
. Однако существует еще больше методов для их создания. Этих методов, вероятно, достаточно, чтобы справиться с большинством возможных ситуаций, с которыми вы можете столкнуться.
Изображения взяты из официальных документов RxJs. Вы можете проверить их здесь.
Я напишу больше о Operators
в моем следующем блоге. Операторы - вот что делает RxJs. Настолько мощный и простой в использовании. Здесь мы уже видели некоторые творения operators
. Но есть еще много операторов, которые эффективно справляются с нашими повседневными сценариями использования.