2017-05-08 27 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'

相关问题