Reactjs Redux observable:如何等待多个异步请求,然后在epic中执行操作
我想等待下面两个http请求完成,然后再触发另一个操作。但是,http请求没有被触发。仅触发了仪表板初始化操作:Reactjs Redux observable:如何等待多个异步请求,然后在epic中执行操作,reactjs,rxjs,redux-observable,Reactjs,Rxjs,Redux Observable,我想等待下面两个http请求完成,然后再触发另一个操作。但是,http请求没有被触发。仅触发了仪表板初始化操作: export const dashboardInitEpic = (action$: any) => action$.ofType(InitActionTypes.DASHBOARD_INIT) .switchMap((action: ActionDashboardInit) => zip$( of$
export const dashboardInitEpic = (action$: any) =>
action$.ofType(InitActionTypes.DASHBOARD_INIT)
.switchMap((action: ActionDashboardInit) =>
zip$(
of$(fetchConfig(action.payload)),
of$(fetchPermission(action.payload))
).switchMap(() =>
zip$(
action$.ofType(ActionTypes.FETCH_CONFIG_FULFILLED).take(1),
action$.ofType(ActionTypes.FETCH_PERMISSION_FULFILLED).take(1)
).switchMap(() => of$({type: InitActionTypes.DASHBOARD_INIT_COMPLETE}))
)
);
要启动http请求,我必须执行以下操作,而这并不是我想要的。Concat强制http请求按顺序进行,下面的代码按顺序侦听FETCH_CONFIG_completed和FETCH_PERMISSION_completed,这有时会中断,具体取决于fetchConfig的响应是否首先返回
export const dashboardInitEpic = (action$: any) =>
action$.ofType(InitActionTypes.DASHBOARD_INIT)
.mergeMap((action: ActionDashboardInit) =>
concat$(
of$(fetchConfig(action.payload)),
of$(fetchPermission(action.payload)),
action$.ofType(ActionTypes.FETCH_CONFIG_FULFILLED).take(1),
action$.ofType(ActionTypes.FETCH_PERMISSION_FULFILLED)
.take(1)
.switchMap(() => of$({type: InitActionTypes.DASHBOARD_INIT_COMPLETE}))
)
);
非常感谢您的帮助。这件事已经困扰了我好几天了。
非常感谢 试试这个:
export const dashboardInitEpic = (action$: any) =>
action$
.ofType(InitActionTypes.DASHBOARD_INIT)
.mergeMap((action: ActionDashboardInit) =>
concat$(
of$(fetchConfig(action.payload)),
of$(fetchPermission(action.payload)),
zip$(
action$.ofType(ActionTypes.FETCH_CONFIG_FULFILLED).take(1),
action$.ofType(ActionTypes.FETCH_PERMISSION_FULFILLED).take(1)
).mapTo({ type: InitActionTypes.DASHBOARD_INIT_COMPLETE })
)
);
这只会在fetchConfig fetchPermission存在一定延迟的情况下运行,如果它们立即返回,则会出现竞争条件,并且zip$将永远不会触发,因为事件将早已过去