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