Redux Observable epic, установить интервал ожидания между действиями - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть этот эпос:

export const updateIsNotVeganInDbFulfilledEpic: Epic < * , * , * > = (
        action$: ActionsObservable < * > ,
        store: Store < * , * >
    ): Observable < any > =>
    action$.ofType('UPDATE_IS_NOT_VEGAN_IN_DB_FULFILLED').mergeMap(action => {
        return Observable.of(
            updateToastComponentIsOpen(true),
            updateToastComponentMessage(action.payload.response.errors[0])
        )
    })

Как я могу отправить другое действие (updateToastComponentIsOpen(false)) через 2 секунды после updateToastComponentIsOpen(true)?

Я пробовал это:

  action$.ofType('UPDATE_IS_NOT_VEGAN_IN_DB_FULFILLED').mergeMap(action => {
    return Observable.of(
      updateToastComponentIsOpen(true),
      updateToastComponentMessage(action.payload.response.errors[0])
    ).timeout(2000)
    .flatMap(function(result) {
      return Observable.of(updateToastComponentIsOpen(false))
    })
  })

Но он остановил отправку первых двух действий.

1 Ответ

0 голосов
/ 25 апреля 2019

flatMap глотает ваши первые два действия.Кроме того, timeout используется для отправки уведомления об ошибке , если что-то не приходит в течение указанного периода времени.

Вместо этого вы хотите ввести delay:

export const updateIsNotVeganInDbFulfilledEpic: Epic<*, *, *> = (
  action$: ActionsObservable<*>,
  store: Store<*, *>
): Observable<any> => action$
  .ofType('UPDATE_IS_NOT_VEGAN_IN_DB_FULFILLED')
  .mergeMap(action =>
    Observable.concat(
      Observable.of(
        updateToastComponentIsOpen(true),
        updateToastComponentMessage(action.payload.response.errors[0]),
      ),
      Observable.of(updateToastComponentIsOpen(false)).delay(2000)
    )
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...