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

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

  • deleteLineFailed
  • showConfirmationMessage
  • Подожди 2с
  • 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 ответ

Решение

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

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

Другие вопросы по тегам