2017-05-15 2 views
1
에픽

으로 행동에서 콜백을 전달 : Actions must be plain JavaScript objects...그러나 나는 일반적인 오류로 실행, 나는 현재 에픽로 콜백 함수를 전달하는 작업 크리에이터를 사용하고

진행 여전히 콜백을 실행하고의 방법이 있나요 Epic 내부에서 관측 가능합니까? 나는 또한 중괄호와 명시 적 리턴을 사용하여 체인을 변수에 할당하고 콜백을 호출 한 후이를 반환하려고 시도했지만 동일한 문제가 발생합니다.

코드 :

const selectItem = (item, activeRow, cb) => ({ type: SELECT_ITEM, activeRow, item, cb }); 

const selectItemEpic = action$ => 
    action$.ofType(SELECT_ITEM) 
    .mergeMap(action => 
     Observable.forkJoin(
      ajax.getJSON(...), 
      ajax.getJSON(...) 
     ) 
     .map(res => returnSelectedItem({ ...res[0].response, ...res[1].response }, action.activeRow)) 
     .map(() => action.cb()) // failing here 
     .takeUntil(action$.ofType(SELECT_ITEM)) 
    ); 

답변

2

map 연산자는 1로 의미 : 1 매핑 - 그래서 당신은 당신의 프로젝션 기능에 뭔가를 반환 할 것으로 기대하고있다. 지금 바로 action.cb()의 결과가 돌아 오는 것입니다. 행동 (예 :/undefined)이 아닌 경우 오류의 원인이됩니다. 이 실제로 당신이 당신의 서사시에서 방출 할 작업, 당신은 대신 스트림을 통해 흐르는 실제 값에 영향을주지 않고 action.cb() 부작용을 확인하기 위해 do 연산자를 사용할 수 있습니다 반환하는 경우

그것은 무엇 returnSelectedItems() 수익률 100 % 확실하지 않다.

const selectItemEpic = action$ => 
    action$.ofType(SELECT_ITEM) 
    .mergeMap(action => 
     Observable.forkJoin(
      ajax.getJSON(...), 
      ajax.getJSON(...) 
     ) 
     .map(res => returnSelectedItem({ ...res[0].response, ...res[1].response }, action.activeRow)) 
     .do(() => action.cb()) // do, instead of map 
     .takeUntil(action$.ofType(SELECT_ITEM)) 
    ); 
+0

다시 한번 감사드립니다. – Jose