RxJS Observables вызываются в обратном порядке

У меня есть следующий код, который отправляет 3 действия:

  • deleteLineFailed
  • showConfirmationMessage
  • Подождите 2 с
  • скрыть сообщение подтверждения

По некоторым причинам единственный способ, которым я смог заставить его работать, - это в обратном порядке, что я делаю неправильно?

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

person Anas    schedule 13.12.2016    source источник


Ответы (1)


Я думаю, что происходит следующее:

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 запускаются сразу друг за другом, а действия скрытия запускаются позже.

person chrigu    schedule 13.12.2016