使用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供下次检查才行。