我最近在做 SAP Spartacus 電商雲的一個單元測試:

起初我 return 的是 of(),後來發現這樣寫的話,下圖 map 操作符内的匿名函數不會觸發。
我們通過單步調試即可找到原因:
首先從目前的 Observable 對象裡提取出 map 操作符。每一個通過 pipe 加工過的 Observable 對象,都有一個 Operator 引用。
然後,使用這個 Operator 調用 Observable 對象。
執行第28行邏輯:
這裡的 this 仍然指向原始的 Observable 對象,而 array 即是輸入參數,也就是傳入 of 裡的空對象{}.
如果改成 of(), 那麼第2行的 array 為空,是以根本不會進入 for 循環,是以 map 操作符裡的匿名函數,也就沒有機會得到執行了:
每個 map Operator 都維護了一個 project 屬性,指向 map 調用時傳入的匿名函數:
現在就執行到我的匿名函數了: