RxJS Observables以相反的顺序调用

时间:2016-12-13 14:25:27

标签: redux rxjs5 redux-observable

我有以下代码发送3个动作:

  • deleteLineFailed
  • showConfirmationMessage
  • 等待2s
  • hideConfirmationMessage

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

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))
                );
        }
    });

1 个答案:

答案 0 :(得分: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中的操作会立即相互发出,而稍后会发出隐藏操作。