Объект Observable¶
Объекты RxJS Observable создаются либо с использованием операторов создания (of
, from
, fromEvent
), либо через new Observable
.
Пример с оператором of()
.
1 |
|
Пример с new Observable
.
1 2 3 4 5 6 7 8 9 10 |
|
Каждый Observable
может отправлять своим "потребителям" уведомления вызовом одного из трех методов:
next()
— отправка данных, количество вызовов не ограничено;error()
— генерация ошибки, параметром указываются данные любого формата (строка, объект, исключение) о причине ее возникновения;complete()
— завершение исполненияObservable
, не принимает никаких параметров и не передает никакого значения.
Но исполнение RxJS Observable
начнется только после вызова у него метода subscribe()
, который принимает функцию с передаваемыми данными в качестве аргумента. Вторым и третьим необязательными параметрами методу subscribe()
можно передать функции, которые будут вызваны в случае ошибки или (и) завершения Observable
.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Вызов error()
или complete()
автоматически завершает исполнение Observable
.
Количество вызовов исполнения такого объекта не ограничено, а сам он даже не знает, сколько "потребителей" получают от него данные.
Метод subscribe()
возвращает объект типа Subscription
, который хранит текущее исполнение конкретного RxJS Observable
и имеет единственный метод unsubscribe()
для отмены его исполнения.
1 2 3 |
|
Вызов unsubscribe()
нужен только для бесконечно исполняемых Observable
, иначе занимаемые ими ресурсы будут освобождены только с окончанием работы всего приложения. А значит в процессе работы программы может произойти утечка памяти или могут быть созданы ненужные дублирующиеся "потребители".
Например, последнее может произойти, когда пользователь зашел на страницу, инициирующую исполнение RxJS Observable
, затем перешел на другой URL и вернулся обратно.
Бесконечно исполняемыми Observable
считаются те из них, которые никогда не вызывают метод complete()
, даже если у них предусмотрен сценарий, при котором произойдет обращение к error()
, что также завершит исполнение.
В Angular приложении unsubscribe()
обычно вызывается на стадии жизненного цикла OnDestroy()
того компонента, в котором используется Observable
.