rxjs5 - RxJS 5 - 函数被调用两次

标签 rxjs5 redux-observable

我正在尝试在使用 RxJS 删除行之前显示确认模式。

  • 如果我删除 1 行,下面的代码就可以正常工作。
  • 当我删除第二行时,deleteLineFulfilled 会被调用两次。
  • 如果我删除第三行,则 deleteLineFulfilled 会被调用 3 次,依此类推...

知道为什么吗?

const deleteLineEpic = (action$, store) =>
action$.ofType(DELETE_LINE_REQUEST)
    .flatMap((action) => Observable.merge(
                Observable.of(showModalYesNo('CONFIRM_DELETE')),
                action$.ofType(MODAL_YES_CLICKED).map(() =>
                    deleteLineFulfilled(action.line)
                )
                .takeUntil(action$.ofType(MODAL_NO_CLICKED))
           ));

最佳答案

action$ 是一个永久的可观察对象,只有当 MODAL_NO_CLICKED 类型的操作被调度时它才会停止 - 从你的代码中很难说这种情况何时发生,您应该在 .takeUntil(...) 之前添加 .take(1)


但是,对于这种架构,您必须确保必须发出MODAL_YES_CLICKEDMODAL_NO_CLICKED,并且发射不能被已跳过。

更简单的方法是实现确认对话框,订阅结果,然后仅在结果为 YESNO 时分派(dispatch)删除操作code> 甚至不分派(dispatch)该操作。这样你就会有一个更干净的 Action 史诗。

关于rxjs5 - RxJS 5 - 函数被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268670/

相关文章:

Angular 2 : How to import rx-dom

reactjs - 在 Axios 中使用 Redux-Observable 的问题

typescript - 找不到模块 'rxjs/subject/BehaviorSubject'

RxJs - 仅在有订阅者时才计算和发出值

javascript - rxjs5 - WebSocketSubject 不是构造函数

javascript - 如何导出可观察值并分配给变量?

javascript - RxJS Observable 轮询直到条件为 true

rxjs - 如何测试 RxJs 去抖史诗?

reactjs - 在 redux-observable 中 - 如何调度操作 "mid-stream"而不返回该操作的值?