【问题标题】:How not to call the second epic if the first one called?如果第一个史诗被调用,如何不调用第二个史诗?
【发布时间】:2019-09-06 03:38:29
【问题描述】:

我有一个特殊的史诗

const extraEpics = combineEpics(someEpic1, someEpicN);

每个人都会检查他们的情况,他们都听同样的动作

action$.pipe(
    ofType(UPDATE_ACTION),
    pluck("payload"),
    filter(checkSomeExtraCase)

当没有一个史诗不会导致时,还有一个默认行为

const defaultBehaviorWithoutFilter = action$.pipe(
        ofType(UPDATE_ACTION),
        pluck("payload"),

当额外的逻辑被过滤时我需要调用它 我尝试连接

export default (action$, state$) =>
  concat(
    extraEpics(action$, state$), 
    defaultBehavior(action$, state$)
  )

但是当被额外调用时,默认会调用到 当 extra 没有被调用时,我怎样才能只导致一个默认值?

【问题讨论】:

  • 另外,我尝试了 combineLatest,但是当未调用 extra 而不是最新值时,我需要从 extra 中返回 Nothing

标签: rxjs rxjs6 redux-observable


【解决方案1】:

在这种情况下,我认为您可以查看 rxjs-etc 并有 concatIfEmpty 运算符,这正是您想要的。

export default (action$, state$) =>
  extraEpics(action$, state$)
    .pipe(
       concatIfEmpty(defaultBehavior(action$, state$))
     )

【讨论】:

  • 但是 extraEpics 每次可以发出多个动作
  • 没有比赛,因为defaultBehavior副作用可能比extraEpics副作用更快,但这并不排除额外逻辑情况的可能性
  • 再次更新了答案-遗憾的是,如果不涉及自定义运算符或外部库,我想不出一个解决方案
  • concatIfEmpty :D 是的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-08
相关资源
最近更新 更多