Typescript 有没有办法在redux observable epic中发送动作?

Typescript 有没有办法在redux observable epic中发送动作?,typescript,redux,rxjs,redux-observable,Typescript,Redux,Rxjs,Redux Observable,我正在开发一个react/redux应用程序,用于处理事件注册,并且必须开发一个epic,用于在不同的事件中注册用户 目前有一个epic处理检查可用座位的过程,我需要在运行“注册”功能之前执行此操作 因此,我尝试实现了一个epic,它将执行以下操作: - Upon recieving an enrolInEvent.request it is going to then - Dispatch checkAvailableSeats.request action - Wait for che

我正在开发一个react/redux应用程序,用于处理事件注册,并且必须开发一个epic,用于在不同的事件中注册用户

目前有一个epic处理检查可用座位的过程,我需要在运行“注册”功能之前执行此操作

因此,我尝试实现了一个epic,它将执行以下操作:

 - Upon recieving an enrolInEvent.request it is going to then
 - Dispatch checkAvailableSeats.request action
 - Wait for checkAvailableSeats.success action
 - Run the 'enrol' async function
 - Dispatch checkAvailableSeats.request again
 - When it gets the checkAvailableSeats.success it is then mapped to enrolInEvent.success
这是我构建的代码,但是我找不到一种方法来在EPIC的中间发送“CuffAccess”。正在发生的是
enrolInEvent.request
已被调度,但redux记录器中没有弹出新操作

//tl;博士:
//enrolInEvent.request->CheckAvailableSets->enrol->CheckAvailableSets再次->enrolInEvent.success
导出常量enrolInEventEpic:EventMetadataEpic=
(操作$,状态$,{eventService})=>
动作$.pipe(
过滤器(isActionOf(enrolInEvent.request)),
map(checkAvailableSets.request),//我需要发送这个
开关映射(()=>
action$.pipe(//然后扫描可观察到的操作以获得成功响应
过滤器(isActionOf(CheckAvailableSets.success)),
以(1)为例,
开关映射(()=>
来自(eventService.enrolInCurrentEvent)(
状态$.value.eventForm.eventStatus,
状态$.value.infrastructure.pageId,
))
.烟斗(
映射(checkAvailableSets.request),//并再次发送到此处
开关映射(()=>
动作$.pipe(
过滤器(isActionOf(CheckAvailableSets.success)),
以(1)为例,
map(checkStatus=>enrolinent.success(checkStatus.payload)),
catchError((消息:字符串)=>of(enrolInEvent.failure(消息)),
)
)
)
)
)
)
);

我的印象是,在史诗的中间映射到一个动作会发出它,但这似乎不是真的。使用redux observable实现所需行为的最简单方法是什么?

调度操作的唯一时间是epic本身返回这些操作时,因此
map(checkAvailableSets.request)
不会像您预期的那样工作,除非它是epic的最后一部分

我不确定为什么您需要两次CheckAvailableSets,但我看到的两个选项是:

1) 将XHR逻辑内联到for
checkAvailableSets.request
,可能带有一个Ajax可观察对象。这样,您就不必发送中间Redux操作


2) 拆分您的epic(
enrolInEventEpic
),以便从单独的epic调度所有操作,并通过区分操作负载来控制两个请求/成功对中的哪一个正在执行

调度操作的唯一时间是epic本身返回这些操作时,因此
映射(CheckAvailableSets.request)
不会像您期望的那样工作,除非它是史诗的最后一部分

我不确定为什么您需要两次CheckAvailableSets,但我看到的两个选项是:

1) 将XHR逻辑内联到for
checkAvailableSets.request
,可能带有一个Ajax可观察对象。这样,您就不必发送中间Redux操作


2) 拆分您的epic(
enrolInEventEpic
),以便所有操作都从单独的epic中调度,并通过区分操作负载来控制两个请求/成功对中的哪一个正在执行。您的意思是,这些操作实际上只在作为epic结果返回后才被调度。有没有一种方法可以让我从同一个epic中生成三个连续动作?我决定将必要的检查移到“enrolInCurrentEvent”方法中,以便epic变得更简单。这不是我想要实现的解决方案,但它完成了任务。@MokonaModoki您可以返回多个操作,但需要将返回的可观察对象展平或合并。你的意思是,动作只有在作为史诗的结果返回时才会被发送。有没有一种方法可以让我从同一个epic中生成三个连续动作?我决定将必要的检查移到“enrolInCurrentEvent”方法中,以便epic变得更简单。这不是我想要实现的解决方案,但它完成了任务。@MokonaModoki您可以返回多个操作,但需要将返回的可观察对象展平或合并。看见