Можно ли «пропустить» выполнение, пока идет другой эпос? - PullRequest
2 голосов
/ 03 мая 2019

Я новичок в RxJS, так что извините, если это не имеет смысла.

Текущий поток во времени выглядит так:

REMOVE_USER -----------------------> SUCCESS
---------------GET_DEVICE--->SUCCESS--------

Цель высокого уровня - пропустить загрузку устройства при удалении пользователя.

Упрощенные эпопеи:

const getDeviceEpic = action$ => action$.pipe(
  ofType('GET_DEVICE_REQUEST'),
  mergeMap(() => from(service...).pipe(
    mapTo({ type: 'GET_DEVICE_SUCCESS' }))
  ))

const removeUser = action$ => action$.pipe(
  ofType('REMOVE_USER_REQUEST'),
  mergeMap(() => from(service...).pipe(
    mapTo({ type: 'REMOVE_USER_SUCCESS' }))
  )
)

Как бы я подошел к этому?

Я не уверен, смогу ли я как-нибудь добавить, например, takeUntil(removeUserAPICall$) к приложению устройства. Или, возможно, проверьте, был ли запущен REMOVE_USER_REQUEST, а затем дождитесь продолжения REMOVE_USER_SUCCESS.

1 Ответ

2 голосов
/ 03 мая 2019

Потенциально, вы можете достичь этого с помощью windowToggle :

windowToggle

В вашем случае "включено" равно REMOVE_USER_SUCCESS и "выключено" равно REMOVE_USER_REQUEST.

Итак, мы будем слушать GET_DEVICE_REQUEST между REMOVE_USER_SUCCESS и REMOVE_USER_REQUEST.

Обратите внимание, что мы должны начать с нашего открытого фильтра, добавив startWith(void 0) к включенному потоку.

например:.

const getDeviceEpic = action$ => action$.pipe(
  ofType('GET_DEVICE_REQUEST'),
  windowToggle(
    action$.pipe(ofType('REMOVE_USER_SUCCESS'), startWith(void 0)),
    ()=>action$.pipe(ofType('REMOVE_USER_REQUEST')
  ),
  mergeMap(() => from(service...).pipe(
    mapTo({ type: 'GET_DEVICE_SUCCESS' }))
  ))

const removeUser = action$ => action$.pipe(
  ofType('REMOVE_USER_REQUEST'),
  mergeMap(() => from(service...).pipe(
    mapTo({ type: 'REMOVE_USER_SUCCESS' }))
  )
)

* предупреждение: записано в блокноте

Тем не менее, imho, также неплохо иметь флаг в магазине (возможно, в качестве индикации состояния).

Подробнее о приостановке и отключении потоков в моей статье " Pausable Observables в RxJS ".

-

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...