我正在努力找出如何catch在我的史诗中的错误处理程序中触发多个动作。
我已经成功地弄清楚了如何使用thunk-middleware在我的史诗中成功触发异步调用上的多个动作。见下文:
const editDomainsEpic = (action$) =>
action$
.ofType(EDIT_DOMAINS)
.mergeMap((action) =>
Rx.Observable.fromPromise(api.editDomains(action.payload))
// Here we are using Redux thunk middleware to execute
// a function instead of just dispatching an action
// so that we can disptach two actions
// ----------------- vvv
.map((domain) => (dispatch) => {
// Display Growl Notifications
dispatch(
displayGrowlNotification(
MESSAGE_TYPES.SUCCESS,
`${domain.name} was saved`
)
)
// Fire Success Action
dispatch({
type: EDIT_DOMAINS_SUCCESS,
payload: { domain }
})
})
.catch((error) => Rx.Observable.of({
type: EDIT_DOMAINS_ERROR,
payload: { error }
}))
.takeUntil(action$.ofType(EDIT_DOMAINS_CANCEL))
)
Run Code Online (Sandbox Code Playgroud)
谁能指导我如何获得catch回报或解雇两个可观察到的行动,这些行动将与我取得成功的方式相似地派遣出去?
Observable.of()支持任意数量的参数,并且将一个接一个地依次发出它们,因此要在您的中发出多个动作catch,您只需添加更多参数即可。
掌握了这些知识后,您还可以使用它来调度成功的多个动作,而不用发出笨拙的命令来自己命令。
const editDomainsEpic = (action$) =>
action$
.ofType(EDIT_DOMAINS)
.mergeMap((action) =>
Rx.Observable.fromPromise(api.editDomains(action.payload))
.mergeMap((domain) => Rx.Observable.of(
displayGrowlNotification(
MESSAGE_TYPES.SUCCESS,
`${domain.name} was saved`
), {
type: EDIT_DOMAINS_SUCCESS,
payload: { domain }
}
))
.catch((error) => Rx.Observable.of({
type: EDIT_DOMAINS_ERROR,
payload: { error }
}, {
type: ANOTHER_ONE,
payload: 'something-else'
}))
.takeUntil(action$.ofType(EDIT_DOMAINS_CANCEL))
)
Run Code Online (Sandbox Code Playgroud)
这将是更加惯用的RxJS(因此可以观察到Redux),但这不是必需的。
| 归档时间: |
|
| 查看次数: |
2001 次 |
| 最近记录: |