
Привет Девс,
Добро пожаловать обратно во 2-й поток/рассказ серии RxJS. В прошлой истории я объяснялНаблюдаемые, сегодня давайте углубимся в термин Наблюдатель и Подписка.
Я предполагаю, что у вас есть базовые знания Observables. Если нет, то обратитесь к этой истории.
Если вы читали предыдущую статью, то я использовал этот пример, чтобы дать вам общее понимание→ «Представьте, что Observables — это резервуар для воды (наполненный водой), Наблюдатель в виде трубы (по ней течет поток воды) и Водопроводный кран для подписки/отписки потока воды». Я тоже использовал тот же пример в этой теме.
Наблюдатель
- Согласно официальному документу→, Наблюдатель — это потребитель значений, предоставляемых Наблюдаемым.Давайте попробуем разобрать это и понять, как мы можем рассматривать Наблюдатель как трубу, по которой течет поток воды, а с помощью водопроводного крана мы подписываемся/отписываемся на воду. Итак, с помощью Observer мы потребляем значение, выдаваемое Observable, значение может быть любым, например, числом, строкой, объектом и т. д.
2. Это объект и имеет следующие свойства с 3 функциями обратного вызова→
SafeSubscriber {
//1
initialTeardown: undefined,
//2
closed: false,
//3
_parentage: null,
//4
_finalizers: null,
//5
isStopped: false,
//6
destination: ConsumerObserver {
partialObserver: { next: undefined, error: undefined, complete: undefined }
}
}
Если вы видите 6-й комментарий, у него есть свойство назначения, которому снова назначается объект с именем "ConsumerObserver", у которого есть свойство "partialObserver", которое имеет 3 обратных вызова→ «Далее, ошибка, завершено».
3. Обозреватели в RxJS также могут быть частичными,относится к тому факту, что не все три функции обратного вызова (следующая, ошибка, полная) в объекте Observer должны быть определены, когда подписка на Observable. В зависимости от нашего варианта использования мы можем определить один или несколько обратных вызовов.
numberStream.subscribe({
//defined the next callback
next:(v)=>console.log(v)
});
numberStream.subscribe({
//defined the next callback
next:(v)=>console.log(v),
//defined the complete callback
complete:()=>console.log("Completed")
});
Подписка
- Это не что иное, как одноразовый ресурс. Он позволяет нам управлять жизненным циклом наблюдения, включая запуск и остановку потока данных. Раньше он назывался Одноразовый, теперь Подписной.
- Это объект, который возвращается, когда мы вызываем метод subscribe() для Observable.
const unsubscribe=numberStream.subscribe({
next:(v)=>console.log(v),
});
console.log(unsubscribe);
-----Subscription Object Structure-----
// SafeSubscriber {
// initialTeardown: undefined,
// closed: true,
// _parentage: null,
// _finalizers: null,
// isStopped: true,
// destination: null
// }
3. Он имеет 3 метода→ добавить(), удалить() и отказаться от подписки().
Давайте попробуем разобраться, может быть такое условие, когда мы хотим добавить 2 и более подписки в одну или хотим удалить подписку или хотим отписать все ресурсы сразу.
import { Observable, Subscription } from "rxjs";
const numberStream = new Observable((subscriber) => {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
});
const observer=({
next:(v)=>console.log(v)
});
const childSubscription1=numberStream.subscribe(observer);
const childSubscription2=numberStream.subscribe(observer);
//created parent subscription
const parentSubscription=new Subscription();
//added both the child subscription
parentSubscription.add(childSubscription1);
parentSubscription.add(childSubscription2);
//unsubscribed the parent subscription.
//unsubscribing the parent subscritption, unsubscibe the both child subscription.
parentSubscription.unsubscribe();
//prints
1
2
3
1
2
3
Итак, это все о "Наблюдателе" и "Подписке" в RxJS. Я буду освещать другие темы, связанные с ним в ближайшие дни.
Если вам понравилась эта история, хлопните в ладоши, а в случае возникновения каких-либо вопросов дайте мне знать в разделе ответов.
Подпишитесь на меня в LinkedIn
На простом английском
Спасибо, что являетесь частью нашего сообщества! Прежде чем уйти:
- Обязательно аплодируйте и подпишитесь на автора! 👏
- Вы можете найти еще больше контента на PlainEnglish.io 🚀
- Подпишитесь на нашу бесплатную еженедельную рассылку. 🗞️
- Подпишитесь на нас в Twitter, LinkedIn, YouTube >» и Discord.