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

被折叠的 条评论
为什么被折叠?



