我正在尝试在使用 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_CLICKED
或MODAL_NO_CLICKED
,并且发射不能被已跳过。
更简单的方法是实现确认对话框,订阅结果,然后仅在结果为 YES
和 NO
时分派(dispatch)删除操作code> 甚至不分派(dispatch)该操作。这样你就会有一个更干净的 Action 史诗。
关于rxjs5 - RxJS 5 - 函数被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41268670/