rxjs with angular

=》Promise vs Observable


observable.subscribe() : 请给我任意数量的值,无论同步还是异步。

rxjs的数组操作符可以把异步事件作为集合来处理。

observables(可观察对象)以惰性的方式推送多值的集合。=》只有订阅的时候数据才会流动。而angular模板里的asyncPipe直接填入的值是一个observable,为什么会有数据呢,因为asyncPipe主动帮我们subscribe(订阅)了。

 

订阅一个可观察对象类似于调用一个函数,是将其推入栈中。Observable的执行可能会是无限的,如果不取消订阅observable就会一直占用内存。

 

当调用了observable.subscribe(),观察者会被附加到observable执行中,这个调用返回一个对象,即subscription(订阅)。subscription表示进行中的执行,只要调用unsubscribe()方法就可以取消执行。

 

angular 中何时取消订阅observable?

https://netbasal.com/when-to-unsubscribe-in-angular-d61c6b21bad3

(一个强调:通过4中subject在各个component之间通信,它们都是hot observable,hot observable不管有没有被订阅都会源源不断的发送值。必须手动取消订阅。一般在钩子函数ngOnDestory中取消订阅。)

 

为什么要尽可能少的调用unsubscribe() 去取消订阅?

https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87

Summary: Use takeUntil, takeWhile, et al.

onDestroy$: Subject<any> = new Subject();
onMount() {
    this.subscription = this.data$.takeUntil(this.onDestroy$).subscribe(data =>this.updateData(data));
    }
  ngOnDestroy(): void {
    this.onDestroy$.next();
  }

 

 angular 管道扩展阅读:

https://blog.csdn.net/wf19930209/article/details/79372098

 

observable 冷热模式:

https://segmentfault.com/a/1190000011052037

Hot Observables在被订阅之前就已经开始产生数据,例如mouse move事件。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值