【发布时间】:2020-12-10 03:06:35
【问题描述】:
我的应用有一个带有微调器的模式,只要发生长时间的阻塞操作,就会显示该模式。 有几个这样的长阻塞动作,每个动作都有一个标记它的开始和结束的动作。
鉴于“动作流”,每当调度一个开始动作时,我想调度showWaitingIndication 动作,直到调度相应的结束动作,然后调度hideWaitingIndication。如果分派了另一个开始操作,然后在第一个阻塞操作正在进行时分派了相应的结束操作,则不应再次调用showWaitingIndication 或hideWaitingIndication。 hideWaitingIndication 也不应在操作仍处于活动状态时被调度。
基本上这个想法是,只要阻塞操作处于活动状态,等待指示就不应隐藏。
例如
StartA -> dispatch(showWaitingIndication) -> 其他事件 -> endA -> dispatch(hideWaitingIndication)
StartA -> dispatch(showWaitingIndication) -> startB -> endB (不应该调用 hide) -> endA -> dispatch(hideWaitingIndication)
还有
StartA -> dispatch(showWaitingIndication) -> startB -> endA (不应该调用 hide!) -> endB -> dispatch(hideWaitingIndication)
我正在努力思考如何使用流来实现这一点(我坚信它非常适合这个问题)。
到目前为止,我已经想出了类似的东西(不起作用)
let showHideActionPairs = getShowHideActionPairs(); // { "startA": "endA", "startB": "endB"}
let showActions = Object.keys(showHideActionPairs);
return action$ => action$.pipe(
filter(action => Object.keys(showHideActionPairs).includes(action.type)),
switchMap(val =>
{
let hideAction = showHideActionPairs[val.type];
return concat(
of(waitingIndicationShowAction),
empty().pipe(
ofType(hideAction),
mapTo(waitingIndicationHideAction)
))
}
)
);
这样做的正确方法是什么?
【问题讨论】:
-
'如果另一个开始动作被调度,它不应该调用 showWaitingIndication' - 你的意思是当当前动作被处理并且另一个动作被调度时它不应该发出
showWaitingIndication,对吧? -
@AndreiGătej 完全正确!更新了问题以澄清
-
第二个动作会发生什么?是否应该同时处理或跳过?
-
@AndreiGătej 用相关案例更新了问题。基本上这个想法是,只要阻止操作处于活动状态,等待指示就不应隐藏
标签: rxjs rxjs6 redux-observable