1

我有以下代码可以调度 3 个动作:

  • 删除线失败
  • 显示确认消息
  • 等待 2s
  • 隐藏确认消息

由于某些原因,我能够使其工作的唯一方法是按相反的顺序,我做错了什么?

const deleteLineEpic = (action$, store) =>
action$.ofType(types.DELETE_LINE_REQUEST)
    .flatMap((action) => {
        return Observable.of(hideConfirmationMessage(action.line.productID))
                .delay(2000)
                .merge(
                    Observable.of(deleteLineFailure(action.line.productID)),
                    Observable.of(showConfirmationMessage(action.line.productID))
                );
        }
    });
4

1 回答 1

2

我认为会发生以下情况:

deleteLine        -----X------------
showConfirmation  -------Y----------
hideConfirmation  --------- 2s -----Z

merge             -----X-Y- 2s -----Z

所有 3 个流被合并,具有延迟的一个在两秒后发出,而另一个立即发出动作。

所以这样做可能会更好:

const deleteLineEpic = (action$, store) =>
action$.ofType(types.DELETE_LINE_REQUEST)
    .flatMap((action) => {
        return Observable.merge(
            Observable.of(deleteLineFailure(action.line.productID),
            showConfirmationMessage(action.line.productID)),
            Observable.of(hideConfirmationMessage(action.line.productID))
                .delay(2000)
        )}
);

在这里,第一个动作Observable.of会立即一个接一个地发出,而隐藏动作是稍后发出的。

于 2016-12-13T16:07:51.887 回答