gpt4 book ai didi

redux-observable - 在捕获错误时触发多个操作

转载 作者:行者123 更新时间:2023-12-01 09:48:50 25 4
gpt4 key购买 nike

我正在努力弄清楚如何在 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))
)

谁能指导我如何拥有 catch返回或触发两个可观察到的 Action ,它们将与我的成功方式类似地被调度?

最佳答案

Observable.of()支持任意数量的参数,并将它们一个接一个地依次发出,因此在您的 catch 中发出多个 Action ,您只需添加更多参数。

掌握了这些知识后,您还可以使用它来调度多个操作以获得成功,而不是发出 thunk 并强制调用自己的调度。

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))
)

这将是更惯用的 RxJS(因此是 redux-observable),但这不一定是必需的。

关于redux-observable - 在捕获错误时触发多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42361073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com