Я использую angular 2 с redux/store вместе с redux-observable для формирования эпиков. То, что я хочу сделать, - это общий опросчик, поэтому мне нужно написать опросник только один раз. У меня есть около 25 сервисов, и я бы предпочел, чтобы действие проходило в том, какой тип действий и сервисов он будет выполнять, а затем иметь дублирующийся код и писать огромный случай или операторы if:
код, который у меня есть до сих пор:
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» или тип «PollerEpic», а затем Я могу отфильтровать это?