2017-11-01 17 views
0

私はredux-storevableと一緒にredux/storeと一緒にangle2を使ってepicsを形成しています。私がしたいのは一般的なポーラーですので、ポーラーを一度書くだけです。私は約25のサービスを持っていると私はむしろアクションのどのタイプでアクションパスを持っているだろうし、それが実行されるサービスは、重複したコードを有すると文を巨大なケースを書いた場合、または:私はこれまで持ってEPICを完全に動的にする方法

コード:

私は擬似コードで何をしたいのか
startPoller: Epic<Action<void>, Action<void>> = action$ => 
    action$.ofType(BankActions.DEPOSIT.POLL_DATA) 
     .switchMap(action => 
     Observable.interval(1000) 
      .takeUntil(action$.ofType(BankActions.DEPOSIT.STOP_POLLING)) 
      .mergeMap(count => 
      this.bankService.getDeposit.(action.payload) 
       .map(payload => ({ type: BankActions.DEPOSIT.POLL_SUCCESS, payload })) 
       .catch(error => Observable.of({ 
       type: BankActions.DEPOSIT.POLLING_FAILED, 
       payload: error 
       })) 
     ) 
) 

startPoller: Epic<Action<void>, Action<void>> = action$ => 
    action$.ofType(BankActions.DEPOSIT.POLL_DATA || BankActions.WITHDRAW.POLL_DATA || InvestActions.STOCK_PRICE.POLL_DATA) 
     .switchMap(action => 
     Observable.interval(1000) 
      .takeUntil(action$.ofType(action.STOP_POLLING)) 
      .mergeMap(count => 
      this.bankService.getDeposit(action.payload) 
       .map(payload => ({ type: BankActions.DEPOSIT.POLL_SUCCESS, payload })) 
       .catch(error => Observable.of({ 
       type: BankActions.DEPOSIT.POLLING_FAILED, 
       payload: error 
       })) 
     ) 
) 

私はそれが私がニーズをポーリングする必要があるすべてのアクション/サービスがあろうと基本型のいくつかの種類を作るために必要がある場合があります仕事持つように推測しています'PollerService'タイプのifsか 'PollerEpic'タイプのif私はそれをフィルタリングできますか?

答えて

0

あなたが尋ねていることは少し不明ですが、私はいくつかのことに答えることができると思います。

あなたの擬似コードofType

action$.ofType(BankActions.DEPOSIT.POLL_DATA || BankActions.WITHDRAW.POLL_DATA || InvestActions.STOCK_PRICE.POLL_DATA) 

を引数として渡すことによって達成することができます。 ofTypeは、指定されたアクションがこれらのタイプのいずれかであるかどうかをチェックします。

action$.ofType(BankActions.DEPOSIT.POLL_DATA, BankActions.WITHDRAW.POLL_DATA, InvestActions.STOCK_PRICE.POLL_DATA) 

私が見るあなたの擬似コードで次のことは、あなたが一致した行動がどのようなSTOP_POLLINGタイプを提供したいということです。

.takeUntil(action$.ofType(action.STOP_POLLING)) 

これは通常、Reduxの型変数は、例えば、文字列と同じ名前を付ける必要があり、どのようなSTOP_POLLINGに対する値は許容される不明ですSTOP_POLLING = 'STOP_POLLING'この場合、すべてが同じ'STOP_POLLING'の値になるので問題はありません。

あなたがそれらが変動する場合、私はUPPER_CASE規則を使用することはありません、維持することが混乱するかもしれない原因:

// what an action _might_ look like 
{ 
    type: BankActions.DEPOSIT.POLL_DATA, 
    meta: { 
    stopType: 'DEPOSIT_STOP_POLLING' 
    } 
} 

// then used something like this: 
.takeUntil(action$.ofType(action.meta.stopType)) 
関連する問題