第三章 - Subject 和 Observable 理解

1.Observable 已经有初步理解了,就是一个可观察的对象,简而言之就是可以被订阅的一个事件流,亦或是数据流

2.Subject 既是一个观察者,也是一个可观察的对象。

 

Subject

网上看到一段释义觉得很贴切,在此引用一下。

可以将 Subject 看作是微信公众号,Observable 是微信用户来理解,分三步拆解。

1.new 一个 Subject 的时候,Subject 内部清单是空的,这时候没有任何 Observable 订阅它。

2.Subject 提供一个可被订阅的方法,当 Observable 订阅这个方法的时候,Subject 内部清单会添加这个 Observable

3.Subject 既然也是一个 Observable,那么它自身也能被订阅,也就是 Subject 也有 next,error,complete 三种状态。

当我们对 Subject 本身进行订阅时,它会对自身内部的清单(微信用户列表)进行循环遍历,并将值发送给每一个 Observable

var subject = new Rx.Subject();

var observerA = {
    next: value => console.log('A>>> ' + value),

var observerB = {
    next: value => console.log('BA>>> ' + value),
}

subject.subscribe(observerA);
subject.subscribe(observerB);

subject.next(1);
// "A>>> 1"
// "B>>> 1"
subject.next(2);
// "A>>> 2"
// "B>>> 2"

 BehaviorSubject

var subject = new Rx.BehaviorSubject(0); // 0 为起始值
var observerA = {
    next: value => console.log('A next: ' + value),
    error: error => console.log('A error: ' + error),
    complete: () => console.log('A complete!')
}

var observerB = {
    next: value => console.log('B next: ' + value),
    error: error => console.log('B error: ' + error),
    complete: () => console.log('B complete!')
}

subject.subscribe(observerA);
// "A next: 0"
subject.next(1);
// "A next: 1"
subject.next(2);
// "A next: 2"
subject.next(3);
// "A next: 3"

setTimeout(() => {
    subject.subscribe(observerB); 
    // "B next: 3"
},3000)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用RxJS库中的ObservableSubject来处理数据流可以帮助你更好地管理和处理异步操作。 首先,你需要在Angular项目中导入RxJS库: ```typescript import { Observable, Subject } from 'rxjs'; ``` 接下来,你可以使用Observable来创建一个可观察对象,它可以发出一个或多个值,并且可以被订阅进行监听。例如: ```typescript const myObservable = new Observable((observer) => { observer.next('Hello'); observer.next('World'); observer.complete(); }); ``` 在上面的示例中,我们创建了一个Observable,它发出了两个值('Hello'和'World'),然后通过调用`complete()`方法来表示数据流结束。 你还可以使用Subject来创建一个可观察的主题,它既是一个观察者,也是一个可被订阅的对象。它可以用来向订阅者广播值或事件。例如: ```typescript const mySubject = new Subject<number>(); // 向主题发送数据 mySubject.next(1); mySubject.next(2); // 订阅主题接收数据 mySubject.subscribe((value) => { console.log(value); // 输出:1, 2 }); ``` 在上面的示例中,我们创建了一个Subject并向其发送了两个值(1和2),然后通过订阅Subject来接收这些值。 除了上述示例之外,RxJS还提供了丰富的操作符和方法,可以帮助你对数据流进行转换、过滤、组合等操作。你可以使用这些操作符来处理异步操作、处理HTTP请求、处理用户输入等场景。 总结起来,使用RxJS中的ObservableSubject可以帮助你更好地处理和管理数据流,使你的代码具备更好的可读性和可维护性。你可以根据具体的需求使用RxJS提供的操作符和方法来进行进一步的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值