2017-05-08 5 views
1

네임 스페이스 내 서사시. 기본적으로 내 서사시를 결합하고 싶지만 사용 된 서사시는 내 상태에 설정된 네임 스페이스에 따라 달라집니다. 내가 지금까지 여기 왔 :이 첫 번째 조치에 대해 작동combineEpics와 같이 작동하지만 네임 스페이스를 기반으로 서사시를 선택하는 메타 서사시 만들기

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은 네임 스페이스가 지정된 스트림에 한 번에 하나씩 작업을 지정하는 스트림이어야합니다. 이제는 다른 스트림으로 대체됩니다. 당신이 당신의 작업 스트림에 ofType 연산자를 사용하려면

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

것은, 이처럼 redux-observable/lib/ActionsObservable 에서 ActionsObservable를 가져올 수 있는지 확인하십시오 :

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

구조에 flatMap