RxJS:forkJoin与BehaviorSubject

本文深入探讨在使用RxJS的forkJoin操作符时遇到的一个常见陷阱,即未正确调用Subject的complete方法可能导致的数据同步问题。通过一个具体案例,阐述了如何避免此问题,并确保在复杂组件间的异步数据流正确传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用forkJoin多个Subject时没有注意看教学文件碰到的坑。

教学文件说的很清楚,forkJoin():

When all observables complete, emit the last emitted value from each.

只有当被forkJoin的所有对象都complete的时候,才会emit各自的最后一个value。

在做共用元件的时候,因为元件内有非同步的资料处理,

因此共用元件设计了一个检查非同步方法是否做完的method让使用共用元件的页面元件呼叫,情境如下:

如果共用元件内的非同步方法已经做完,就return一个of(undefined)的observable;

如果共用元件内的非同步方法已经做完,就return元件内一个private subject.asObservable(),做完时会呼叫subject.next()。

开发过程中,

因为页面元件中使用到两个共用元件,所以将两个共用元件检查method回传的observable给forkJoin起来,

却发现永远不会进入subscribe()中success的callback,

原因就是出在共用元件的subject我只呼叫了next(),没有呼叫complete()。

不呼叫complete()的原因,原本是希望这个subject能够被重复使用,不用每次检查都用一个新的instance。

不过既然可能被用在forkJoin()中,还是需要complete()之后再重新建立一个instance供下次检查才行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值