2017-05-15 1 views
1
エピック

にアクションからのコールバックを渡す:Actions must be plain JavaScript objects...しかし、私は一般的なエラーに遭遇し、私は現在、エピックにコールバック関数を渡すためにアクションの作成者を使用しています

を進め、まだコールバックを実行するとの方法はありますエピックの中で観察可能なの?また、中括弧と明示的な戻り値を使ってチェーンを変数に割り当て、コールバックを呼び出した後に返すようにしましたが、同じ問題が発生します。

コード:

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

関連する問題