我使用 angular 2 和 redux/store 以及 redux-observable 来形成史诗。我想做的是一个通用的轮询器,所以我只需要编写一次轮询器。我有大约 25 项服务,我宁愿让动作传递什么类型的动作,以及它将执行的服务,然后使用重复的代码并编写大量的 case 或 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
}))
)
)
我猜想让它工作我可能需要制作某种类型的基本类型,每个需要轮询的操作/服务都会扩展,然后我可以检查 ifs 类型是“PollerService”还是“PollerEpic”,然后我可以过滤吗?