1

3 つのアクションをディスパッチする次のコードがあります。

  • deleteLineFailed
  • showConfirmationMessage
  • 2 秒待つ
  • hide確認メッセージ

いくつかの理由で、私がそれを機能させることができた唯一の方法は逆の順序です.私が間違っているのは何ですか?

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 つのストリームすべてがマージされ、遅延のあるストリームは 2 秒後に発行され、もう一方のストリームはすぐにアクションを発行します。

したがって、これを行う方が良いかもしれません:

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 に答える