RxJS 5 - 函数被调用两次

RxJS 5 - function called twice

我试图在使用 RxJS 删除一行之前显示一个确认模态。

知道为什么吗?

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_CLICKEDMODAL_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))