RxJS 5 - 函数被调用两次
RxJS 5 - function called twice
我试图在使用 RxJS 删除一行之前显示一个确认模态。
- 如果我删除 1 行,下面的代码可以正常工作。
- 当我删除第二行时,
deleteLineFulfilled
被调用了 2 次。
- 如果我删除第三行,那么
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
类型的动作时停止——从你的代码中很难说什么时候发生,你应该添加一个 .take(1)
在 .takeUntil(...)
.
之前
然而,对于此架构,您必须确保 has 发出 MODAL_YES_CLICKED
或 MODAL_NO_CLICKED
并且不能跳过发射.
一种更简单的方法是实现 confirm-dialog,订阅结果,然后仅在结果为 YES
且结果为 [=17 时分派 delete-action =] 甚至不派发动作。这样你就会有一个更干净的 action-epic.
试试这个:
.first() // $action is a perpetual observable. Only take the first one.
.takeUntil(action$.ofType(MODAL_NO_CLICKED))
我试图在使用 RxJS 删除一行之前显示一个确认模态。
- 如果我删除 1 行,下面的代码可以正常工作。
- 当我删除第二行时,
deleteLineFulfilled
被调用了 2 次。 - 如果我删除第三行,那么
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
类型的动作时停止——从你的代码中很难说什么时候发生,你应该添加一个 .take(1)
在 .takeUntil(...)
.
然而,对于此架构,您必须确保 has 发出 MODAL_YES_CLICKED
或 MODAL_NO_CLICKED
并且不能跳过发射.
一种更简单的方法是实现 confirm-dialog,订阅结果,然后仅在结果为 YES
且结果为 [=17 时分派 delete-action =] 甚至不派发动作。这样你就会有一个更干净的 action-epic.
试试这个:
.first() // $action is a perpetual observable. Only take the first one.
.takeUntil(action$.ofType(MODAL_NO_CLICKED))