我遇到了一个问题,我在useEffect
中使用不同的有效负载调度了两次操作。这两个动作都被正确地分派了,但是只有第二个动作执行了我的epic函数。
这是我的useEffect
useEffect (() => {
dispatch (actions.getDashboardData ({
viewKey: DASHBOARD_KINDS.PUBLISHER,
widgetKey: DASHBOARD_WIDGETS.KEY_METRICS,
isOldData: false,
data: {
metrics: query.metrics,
dimensions: query.dimensions,
interval: {
begin: "2023-05-27T00:00:00",
end: "2023-05-31T00:00:00"
}
}
}))
dispatch (actions.getDashboardData ({
viewKey: DASHBOARD_KINDS.PUBLISHER,
widgetKey: DASHBOARD_WIDGETS.KEY_METRICS,
isOldData: true,
data: {
metrics: query.metrics,
dimensions: query.dimensions,
interval: {
begin: "2023-05-23T00:00:00",
end: "2023-05-27T23:00:00"
}
}
}))
}, [])
下面是我的Epic函数
const getDashboardDataEpic = (action$, state$) => action$
.pipe (
ofType (types.GET_DASHBOARD_DATA),
switchMap (({ payload }) => {
const { api, session } = state$.value
const { data, widgetKey, viewKey, isOldData } = payload
console.log ("Processing...", payload)
const httpPayload = {/**Payload Data**/}
return pipe ([
setMethod (HTTP_METHOD.POST),
setPath (API_ENDPOINTS.DASHBOARD_SEARCH),
send (httpPayload)
]) (api)
.pipe (
map ((http) => {
return actions.getDashboardDataSuccess ({
data: http.response,
//..remaining data
})
}),
catchError (http => {
// Error handling
}
)
)
})
)
export default combineEpics (
getDashboardDataEpic
)
如前所述,两个都被正确地分派,但在最后只有第二个分派执行EPIC函数
谢谢
1条答案
按热度按时间vfhzx4xs1#
switchMap()
强制在任何给定时间仅订阅一个内部可观察对象。因此,当您在内部可观察http请求完成之前分派第二个动作时,它会从第一个内部可观察对象中取消订阅。如果你想让它们并发运行,你可以使用mergeMap()
。如果你想顺序运行,请使用concatMap()
。