【发布时间】:2017-03-25 02:33:24
【问题描述】:
我有一个平面地图,目的是发出两个动作:
export default function searchForPartner(action$, store) {
return action$.ofType(statusActions.SEARCH_FOR_PARTNER)
.filter(() => store.getState().user.signedIn)
.delay(2000)
.flatMap(() => [
carouselActions.slideTo(config.CAROUSEL_SLIDES.CONFIRM_CHAT),
statusActions.foundPerson(),
])
.takeUntil(action$.ofType(carouselActions.TAP_CANCEL))
};
但是,takeUntil 的位置不对。当TAP_CANCEL 发出时,它正在取消整个史诗。相反,我只希望它取消在flatMap 内发出的动作。我该怎么做?
=== 更新 ===
我玩弄了它,这似乎有效?但我不喜欢有 2 个计时器:
export default function searchForPartner(action$, store) {
return action$.ofType(statusActions.SEARCH_FOR_PARTNER)
.filter(() => store.getState().user.signedIn)
.mergeMap(() =>
Observable.merge(
Observable.timer(2000)
.map(() => carouselActions.slideTo(config.CAROUSEL_SLIDES.CONFIRM_CHAT)),
Observable.timer(2000)
.map(() => statusActions.foundPerson())
)
.takeUntil(action$.ofType(carouselActions.TAP_CANCEL))
)
};
【问题讨论】:
-
所以如果在 2000 延迟期间收到
TAP_CANCEL,您不想发出操作? -
hm 如果收到
TAP_CANCEL,我想取消flatMap中所有内容的执行。我想我可能把delay(2000)放在了错误的位置 -
@cartant 用我拼凑的丑陋解决方案更新了问题
-
正确,我不希望
carouselActions.slideTo和statusActions.foundPerson在 2 秒延迟之前调用TAP_CANCEL时发生副作用
标签: rxjs redux-observable