2017-05-08 63 views
1

我試圖命名空間我的史詩。我基本上想結合我的史詩,但史詩使用應該取決於我的狀態設置的名稱空間。 我目前在這裏得到:創建一個類似combineEpics的meta-epic,但是基於命名空間選擇一個史詩

const epics = { 
    'ns1': nameSpace1Epic, 
    'ns2': nameSpace2Epic, 
    'default': (action$, store) => { 
    return Observable.of({type: 'NOP'}) 
    } 
} 
const superEpic = (action$, store) => { 
    const { namespace } = store.getState() 
    const epic = epics[namespace] 
    const resultAction$ = epic(action$, store) 
    return resultAction$ 
} 

這適用於第一個動作,它成功地切換到正確的命名空間。然而,當第二個動作進入時,它仍然停留在第一個選定的命名空間。 沒有行動通過超能力,它直接到第一史詩。

我一直在閱讀Rx文檔,並嘗試使用不同類型的操作符,但沒有任何運氣。 有人知道我可能做錯了嗎?

回答

0

我找到了解決我的問題的方法。 superEpic應該是一個將動作(一次一個)指向命名空間流的流,它現在所做的只是簡單地用另一個流替換它自己。 flatMap救援:

const superEpic = (action$, store) => 
    action$.flatMap(action => { 
    const { namespace } = store.getState() 
    const epic = epics[namespace] 
    return epic(Observable.of(action), store) 
    }) 

如果你想使用ofType運營商在你的動作流,確保從redux-observable/lib/ActionsObservable 導入ActionsObservable像這樣:

import { ActionsObservable } from 'redux-observable/lib/ActionsObservable'

相關問題